Re: [OpenMap Users] Discovering the minimum scale at which an RPF layer will show

From: Don Dietrick <dietrick_at_bbn.com>
Date: Tue, 8 Mar 2005 06:55:00 -0500

On Mar 8, 2005, at 5:23 AM, Laura Paterson wrote:

> Hi Don,
>
> Thanks for your speedy reply! I am definitely getting close now - the
> coverage boxes that I would expect are being returned, however the
> scale
> from these is 0.0.
>
> Code and output as follows:
>
> for (int i = 0; i < layers.length; i++) {
> if (layers[i] instanceof RpfLayer) {
>
> RpfLayer rpf = (RpfLayer)layers[i];
> List rpfKeys =
> Collections.list(RpfProductInfo.getCatalog().keys());
> Vector cvgs = new Vector();
> for (int j=0; j<rpfKeys.size(); j++) {
>
> cvgs.addAll(rpf.getFrameProvider().getCatalogCoverage(
> (float)minLat, (float)minLon, (float)maxLat,
> (float)maxLon, (CADRG)proj, (String)rpfKeys.get(j)));
> }
> System.out.println(rpf.getName() + "
> fProvider.getCatalogCoverage for area = "+cvgs.size());
> for (int j=0; j<cvgs.size(); j++) {
> RpfCoverageBox box =
> (RpfCoverageBox)cvgs.get(j);
> System.out.println(layers[i].getName()
> + "
> scale from coverage = "+box.scale);
> minScale = Math.min(minScale,
> box.scale);
> }
> }
> }
>
>
> ONC9 fProvider.getCatalogCoverage for area = 0
> ONC5 fProvider.getCatalogCoverage for area = 0
> ONC4 fProvider.getCatalogCoverage for area = 2
> ONC4 scale from coverage = 0.0
> ONC4 scale from coverage = 0.0
> ONC3 fProvider.getCatalogCoverage for area = 0
> High Level CADRG fProvider.getCatalogCoverage for area = 3
> High Level CADRG scale from coverage = 0.0
> High Level CADRG scale from coverage = 0.0
> High Level CADRG scale from coverage = 0.0
>
> Is box.scale the right way to access the scale?

Well, I guess it depends on the creator of your data, there should be a
value there. I'd print out the RpfCoverageBox just to see what it
thinks, using it's toString() method. You can always use the chartCode
and look up the scale in the RpfProductInfo

> On a different note, I am currently specifying the String chartSeries
> parameter of FrameProvider.getCatalogCoverage(...) by iterating
> through all
> the keys returned by the RPFProductInfo catalogue. Is there any
> parameter I
> could use instead to return all chartSeries?

You can use null for that. Sorry, that should be in the docs. I had
to look at the code myself for that one.

- Don

> -----Original Message-----
> From: Don Dietrick [mailto:dietrick_at_bbn.com]
> Sent: 07 March 2005 23:51
> To: Laura Paterson
> Cc: openmap-users_at_bbn.com
> Subject: Re: [OpenMap Users] Discovering the minimum scale at which an
> RPF layer will show
>
>
> Hi Laura,
>
> There's a distinct difference between RpfFrameProvider.getCoverage(...)
> and RpfFrameProvider.getCatalogCoverage(...). getCoverage(...)
> actually provides the RpfCoverageBoxes that best match the requested
> projection, only the information for display. getCatalogCoverage(...)
> returns information about what could be displayed at all scales over a
> given area. The getCatalogCoverage(...) is the request you want to
> make, and then you want to look at those RpfCoveageBoxes for the scale
> of those charts, and then set the map to the scale that best suites
> your purpose. The ONC base scale is actually 1:1M, but it can be
> viewed at 1:500k.
>
> The RpfLayer.getCoverageBoxes() is the same thing as
> RpfFrameProvider.getCoverage(...), which is why you don't see a
> difference.
>
> Hope this helps,
>
> Don
>
>
> On Mar 7, 2005, at 11:08 AM, Laura Paterson wrote:
>
>> sorry, I don't think I was explaining myself very well.
>>
>> I have attached a couple of screen shots, to see if I can be any
>> clearer.
>>
>> In another part of my application I have an object which has a
>> geographic
>> location and coverage. The user can opt to view this object's
>> coverage on
>> the map. As I know the bounding box of this object, I calculate the
>> object
>> centre point in order to create a new projection. Previously I was
>> also
>> using Projection.getScale to work out what scale this projection use.
>>
>> As you can see in screen shot view_area.jpg, this results in the
>> object
>> taking up all available height or width of the screen. This object is
>> quite
>> large (approx 4 miles wide), so we can see some RPF being displayed,
>> but it
>> is displaying at the scale determined by Projection.getScale, not the
>> preferred scale of that RPF coverage. My objects can be only a few
>> metres
>> long, therefore usually the scale determined by Projection.getScale is
>> too
>> small to see any detailed mapping that we have.
>>
>> The second screen shots shows the same object selected on the map, but
>> it is
>> being viewed at 1:500K, the scale of the mapping data. This is the
>> effect I
>> want to create programmatically.
>>
>> When I first create the projection that I want to move to, I output
>> the
>> following for each RPF layer:
>>
>> System.out.println(rpf.getName() + " getCoverageBoxes =
>> "+rpf.getCoverageBoxes().size());
>> Vector cvgs = rpf.getFrameProvider().getCoverage((float)minLat,
>> (float)minLon, (float)maxLat, (float)maxLon, (CADRG)proj);
>> System.out.println(rpf.getName() + " fProvider.getCoverage for area
>> =
>> "+cvgs.size());
>>
>>
>> My output is:
>>
>> ONC9 getCoverageBoxes = 0
>> ONC9 fProvider.getCoverage for area = 0
>> ONC5 getCoverageBoxes = 0
>> ONC5 fProvider.getCoverage for area = 0
>> ONC4 getCoverageBoxes = 0
>> ONC4 fProvider.getCoverage for area = 0
>> ONC3 getCoverageBoxes = 0
>> ONC3 fProvider.getCoverage for area = 0
>> High Level CADRG getCoverageBoxes = 0
>> High Level CADRG fProvider.getCoverage for area = 0
>>
>> I have tried zooming through all levels of mapping in this area, to
>> ensure
>> that the layers are loaded. They all become visible, but there are
>> still no
>> coverage boxes reported.
>>
>> I was just re-running through the above steps to make sure i haven't
>> missed
>> anything, and I noticed that if I am currently viewing a particular
>> RPF
>> layer, then ask the map to create the new projection, it will discover
>> coverages for the layer it is on. However, if I then move out of that
>> layers scale, it no longer finds it...
>> Here is the output from this, in order and without restarting/
>> reloading
>> anything...
>>
>> ONC9 getCoverageBoxes = 0
>> ONC9 fProvider.getCoverage for area = 0
>> ONC5 getCoverageBoxes = 0
>> ONC5 fProvider.getCoverage for area = 0
>> ONC4 getCoverageBoxes = 1
>> ONC4 fProvider.getCoverage for area = 1
>> ONC3 getCoverageBoxes = 0
>> ONC3 fProvider.getCoverage for area = 0
>> High Level CADRG getCoverageBoxes = 0
>> High Level CADRG fProvider.getCoverage for area = 0
>>
>> ONC9 getCoverageBoxes = 0
>> ONC9 fProvider.getCoverage for area = 0
>> ONC5 getCoverageBoxes = 1
>> ONC5 fProvider.getCoverage for area = 0
>> ONC4 getCoverageBoxes = 1
>> ONC4 fProvider.getCoverage for area = 1
>> ONC3 getCoverageBoxes = 0
>> ONC3 fProvider.getCoverage for area = 0
>> High Level CADRG getCoverageBoxes = 1
>> High Level CADRG fProvider.getCoverage for area = 1
>>
>> ONC9 getCoverageBoxes = 0
>> ONC9 fProvider.getCoverage for area = 0
>> ONC5 getCoverageBoxes = 0
>> ONC5 fProvider.getCoverage for area = 0
>> ONC4 getCoverageBoxes = 1
>> ONC4 fProvider.getCoverage for area = 1
>> ONC3 getCoverageBoxes = 0
>> ONC3 fProvider.getCoverage for area = 0
>> High Level CADRG getCoverageBoxes = 1
>> High Level CADRG fProvider.getCoverage for area = 1
>>
>> ONC9 getCoverageBoxes = 0
>> ONC9 fProvider.getCoverage for area = 0
>> ONC5 getCoverageBoxes = 0
>> ONC5 fProvider.getCoverage for area = 0
>> ONC4 getCoverageBoxes = 1
>> ONC4 fProvider.getCoverage for area = 1
>> ONC3 getCoverageBoxes = 0
>> ONC3 fProvider.getCoverage for area = 0
>> High Level CADRG getCoverageBoxes = 1
>> High Level CADRG fProvider.getCoverage for area = 1
>>
>> ONC9 getCoverageBoxes = 0
>> ONC9 fProvider.getCoverage for area = 0
>> ONC5 getCoverageBoxes = 0
>> ONC5 fProvider.getCoverage for area = 0
>> ONC4 getCoverageBoxes = 0
>> ONC4 fProvider.getCoverage for area = 0
>> ONC3 getCoverageBoxes = 0
>> ONC3 fProvider.getCoverage for area = 0
>> High Level CADRG getCoverageBoxes = 1
>> High Level CADRG fProvider.getCoverage for area = 1
>>
>> Please help - I think I am misunderstanding something here...!
>>
>> Thanks, Laura
>>
>>
>> -----Original Message-----
>> From: Don Dietrick [mailto:dietrick_at_bbn.com]
>> Sent: 07 March 2005 15:00
>> To: Laura Paterson
>> Cc: openmap-users_at_bbn.com
>> Subject: Re: [OpenMap Users] Discovering the minimum scale at which an
>> RPF layer will show
>>
>>
>> Hi Laura,
>>
>> The code you have is exactly what you want to use. I guess I don't
>> understand the difference between asking for coverage for a point, and
>> your problem with having the bounding box in the query being too
>> small.
>> It seems like they would both provide the same answer.
>>
>> Has the RpfLayer been added to the map? The RpfTocHandler doesn't
>> read
>> the A.TOC file until it needs to display something, so it probably
>> wouldn't know anything until then.
>>
>> - Don
>>
>>
>> On Mar 7, 2005, at 9:29 AM, Laura Paterson wrote:
>>
>>> Hi Don,
>>>
>>> Thank you for your reply.
>>>
>>>> You can ask the RpfLayer for it's RpfCoverageProvider, and then ask
>>>> it
>>>> for it's coverage over a specific area. Those coverages will tell
>>>> you
>>>> what scale you need to view that data. The coverage will viewable
>>>> at
>>>> that scale * or / by the scaleFactor of that value.
>>>
>>> Ok, I have tried that, but it doesn't quite do what I am looking for.
>>> Here
>>> is the code that I used:
>>>
>>> for (int i = 0; i < layers.length; i++) {
>>> if (layers[i] instanceof RpfLayer) {
>>>
>>> RpfLayer rpf = (RpfLayer)layers[i];
>>> RpfFrameProvider fProvider =
>>> rpf.getFrameProvider();
>>> Vector cvgs =
>>> fProvider.getCoverage((float)minLat, (float)minLon, (float)maxLat,
>>> (float)maxLon, (CADRG)proj);
>>> for (int j=0; j<cvgs.size(); j++) {
>>> RpfCoverageBox box =
>>> (RpfCoverageBox)cvgs.get(j);
>>>
>>> System.out.println(layers[i].getName()
>>> + "
>>> scale from coverage = "+box.scale);
>>> minScale = Math.min(minScale,
>>> box.scale);
>>> }
>>> }
>>> }
>>>
>>>
>>> Unfortunately there area never any coverages for this bounding box,
>>> because
>>> it covers such a small area...
>>> I tried replacing the Vecor cvgs line with : Vector cvgs =
>>> rpf.getCoverageBoxes(); However, this Vector is always empty.
>>>
>>> I guess what am looking for (ideally!) is to be able to specify a
>>> point,
>>> and ask at what scales will this point have rpf coverage. Is there
>>> anything
>>> in the API that can help me achive this?
>>>
>>> Thanks,
>>>
>>> Laura
>>> This email and any files attached to it are of a confidential nature
>>> and
>>> intended for the exclusive use of the individual or entity to whom
>>> they are
>>> addressed. If you are not the intended recipient, please be advised
>>> that you
>>> have received this email in error and action should be taken to
>>> inform
>>> the
>>> originator and this email should be deleted immediately and any
>>> copies
>>> made
>>> should be destroyed. If you are not the intended recipient, any form
>>> of
>>> disclosure, distribution, printing, copying or any other use of this
>>> email
>>> or the information in it or in any attachments is strictly prohibited
>>> and
>>> may be unlawful. Any views, opinions or other information expressed
>>> in
>>> the
>>> email and any attachments are those of the originator and not given
>>> or
>>> endorsed by General Dynamics UK Ltd.In compliance with the various
>>> Regulations and Acts, please be aware that General Dynamics UK Ltd
>>> reserves
>>> the right to monitor all emails and email attachments, both inbound
>>> and
>>> outbound, allowing legitimate business practice to continue.In
>>> addition to
>>> monitoring, General Dynamics UK Ltd also provides appropriate
>>> Antivirus
>>> measures scanning all incoming and outgoing email and email
>>> attachments.
>>> However, email communications cannot be guaranteed to be secure or
>>> free of
>>> errors as information may be intercepted, corrupted, amended, lost,
>>> destroyed or contain viruses. General Dynamics UK Ltd do not accept
>>> liability or responsibility for any such matters or the consequences
>>> thereof.
>>>
>>> --
>>> [To unsubscribe to this list send an email to "majdart_at_bbn.com"
>>> with the following text in the BODY of the message "unsubscribe
>>> openmap-users"]
>>>
>>>
>>
>>
>> =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
>> Don Dietrick, dietrick_at_bbn.com
>> BBN Technologies, Cambridge, MA
>> =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
>> This email and any files attached to it are of a confidential nature
>> and
>> intended for the exclusive use of the individual or entity to whom
>> they are
>> addressed. If you are not the intended recipient, please be advised
>> that you
>> have received this email in error and action should be taken to inform
>> the
>> originator and this email should be deleted immediately and any copies
>> made
>> should be destroyed. If you are not the intended recipient, any form
>> of
>> disclosure, distribution, printing, copying or any other use of this
>> email
>> or the information in it or in any attachments is strictly prohibited
>> and
>> may be unlawful. Any views, opinions or other information expressed in
>> the
>> email and any attachments are those of the originator and not given or
>> endorsed by General Dynamics UK Ltd.In compliance with the various
>> Regulations and Acts, please be aware that General Dynamics UK Ltd
>> reserves
>> the right to monitor all emails and email attachments, both inbound
>> and
>> outbound, allowing legitimate business practice to continue.In
>> addition to
>> monitoring, General Dynamics UK Ltd also provides appropriate
>> Antivirus
>> measures scanning all incoming and outgoing email and email
>> attachments.
>> However, email communications cannot be guaranteed to be secure or
>> free of
>> errors as information may be intercepted, corrupted, amended, lost,
>> destroyed or contain viruses. General Dynamics UK Ltd do not accept
>> liability or responsibility for any such matters or the consequences
>> thereof.
>>
>>
>> <view_area.jpg><view_area_correct_scale.jpg>
>
>
> =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
> Don Dietrick, dietrick_at_bbn.com
> BBN Technologies, Cambridge, MA
> =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
> This email and any files attached to it are of a confidential nature
> and
> intended for the exclusive use of the individual or entity to whom
> they are
> addressed. If you are not the intended recipient, please be advised
> that you
> have received this email in error and action should be taken to inform
> the
> originator and this email should be deleted immediately and any copies
> made
> should be destroyed. If you are not the intended recipient, any form of
> disclosure, distribution, printing, copying or any other use of this
> email
> or the information in it or in any attachments is strictly prohibited
> and
> may be unlawful. Any views, opinions or other information expressed in
> the
> email and any attachments are those of the originator and not given or
> endorsed by General Dynamics UK Ltd.In compliance with the various
> Regulations and Acts, please be aware that General Dynamics UK Ltd
> reserves
> the right to monitor all emails and email attachments, both inbound and
> outbound, allowing legitimate business practice to continue.In
> addition to
> monitoring, General Dynamics UK Ltd also provides appropriate Antivirus
> measures scanning all incoming and outgoing email and email
> attachments.
> However, email communications cannot be guaranteed to be secure or
> free of
> errors as information may be intercepted, corrupted, amended, lost,
> destroyed or contain viruses. General Dynamics UK Ltd do not accept
> liability or responsibility for any such matters or the consequences
> thereof.
>
>


=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Don Dietrick, dietrick_at_bbn.com
BBN Technologies, Cambridge, MA
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

--
[To unsubscribe to this list send an email to "majdart_at_bbn.com"
with the following text in the BODY of the message "unsubscribe openmap-users"]
Received on Tue Mar 08 2005 - 06:55:44 EST

This archive was generated by hypermail 2.3.0 : Tue Mar 28 2017 - 23:25:06 EDT