Re: [OpenMap Users] OMCircle Distortion?

From: Christopher Franklin <christopher.franklin_at_lmco.com>
Date: Wed, 30 Jul 2008 10:22:53 -0400

Hey Don!

You are exactly right! It was a problem with the distance I was
calculating between my first click and my second. I was calculating the
physical distance in euclidean geometry... not very good for distance on
the surface of a sphere! Now the edge of the circle and the handle line
up perfectly!

Thanks a ton for you help!
Chris

Donald Dietrick wrote:
> Hi Chris,
>
> I still don't understand how you are calculating your handle distance
> from the center of the circle. What is your algorithm.
>
> Looking at the pictures, it looks like the pixel distance between your
> handle and the center of the circle is constant, independent of
> latitude. That isn't right, if that distance is supposed to reflect
> ground distance. Longitudinal distance will increase for the same
> horizontal distance as latitude increases, for the Mercator
> projection. The circles are at least behaving correctly.
>
> I don't think this is a problem with your picture offset for the icon
> either. I think it's a problem with your algorithm figuring out the
> distance from your second click point to the center of the circle,
> either with the distance algorithm or the units you are giving the
> circle, or something like that.
>
> - Don
>
>
> On Jul 29, 2008, at 11:43 AM, Christopher Franklin wrote:
>
>> I am attaching 2 screen shots to help illustrate what exactly I am
>> trying to explain here. In the pictures, the circle that is being
>> drawn is exactly the same size. The only thing that has changed is
>> the center position.
>>
>> To define a circle I click once to set the center and I click a
>> second time to set where I want the edge of that circle. Using that
>> method I would expect the edge of the circle to be drawn through my
>> current mouse position. The handle is being added to the location
>> where the mouse was clicked and to the original center location.
>> Whenever I click to the N/S line the handle lines up with the edge,
>> however when I click closer to the E/W line the handle is being drawn
>> where I click and the edge of the circle is being drawn further out.
>> The arguments to OMCircle are the center LatLon that I am generating
>> on the first click and the distance calculated between my first click
>> and my second click as the radius.
>>
>> I do understand that graphically it isn't going to look much like a
>> circle, but mathematically it should all calculate out. When I
>> printed out the values of both the Screen coordinates and the
>> converted Lat/Lon I can plug those numbers into the distance formula
>> and see that the radius I should have is correct, as well as finding
>> a point on a circle I can see the edge handle is being drawn at the
>> correct Lat/Lon position to be on the edge of the circle. Looking
>> through the code again I can see one place where this problem may be
>> occurring... I am using an offset on the Edge Handle OMGraphic. The
>> graphic is 16x16px and I am using an offset of 7 pixels to display it
>> from the center instead of the corner. Could this be causing the huge
>> offset seen in the picture above?
>>
>> Thank you for all your help on this!
>> Chris
>>
>> Don Dietrick wrote:
>>> OMCircle basically does what your are doing - it finds the points at
>>> different angles at the same distance from the center, and then
>>> connects those points as a polygon.
>>>
>>> I'm not sure why your handle would show up in a different place than
>>> the circle edge, especially if the N/S points are lining up, but I
>>> don't understand your algorithm for finding the E/W handle (distance
>>> from the center to that point).
>>>
>>> - Don
>>>
>>> Christopher Franklin wrote:
>>>> Hi Don,
>>>>
>>>> Thanks for replying so quickly.
>>>>
>>>> Don Dietrick wrote:
>>>>
>>>>> Hi Chris,
>>>>>
>>>>> Christopher Franklin wrote:
>>>>>> Greetings,
>>>>>>
>>>>>> I am working on a project that requires a user to select an area
>>>>>> on the map by using a circle. The user clicks to select the
>>>>>> center and then again to select the edge (radius). I am using an
>>>>>> OMCircle because it exhibits the proper behavior for a circle on
>>>>>> a globe.
>>>>>>
>>>>>> I have noticed a problem with the OMCircle though. After drawing
>>>>>> it using the provided center and radius I am adding a graphic to
>>>>>> represent the center and another to represent the rightmost edge
>>>>>> of the circle. When the circle is drawn on or near the equator
>>>>>> everything appears correct. However, if the circle is drawn north
>>>>>> or south there is a noticeable distortion in how the circle and
>>>>>> the edge handle are drawn. I have done some experimentation and
>>>>>> discovered that the handle is being drawn in the correct
>>>>>> location, but the edge of the circle is not. The further away
>>>>>> from the equator the greater the discrepancy between my handle
>>>>>> location and the OMCircle edge. If, however, I move the handle to
>>>>>> the top of the circle it is always drawn in the correct location.
>>>>>> For usability purposes I would like the handle to be on the right
>>>>>> hand side! Is there a way to fix this? If not, I guess they will
>>>>>> have to deal with the handle being on the top or bottom of the
>>>>>> circle...
>>>>>
>>>>> How are you creating the handle location, and what are its
>>>>> location parameters? How do you know the handle is in the right
>>>>> place?
>>>> The handle location is being generated by taking the current
>>>> position of the center in Lat/Lon and adding the circle radius to
>>>> the Longitude. To generate the the handle position on the "top" of
>>>> the circle I instead added the radius to the Latitude.
>>>>
>>>> To determine that the handle was in the proper location took a bit
>>>> of experimentation. I have the ability to produce multiple circles
>>>> at a time. By experimentation I determined that by clicking on the
>>>> center of the circle and my artificial handle I was able to create
>>>> the same size of circle. If I click on the center and then put the
>>>> radius on the displayed circle edge I get a new circle with the
>>>> edge handle being drawn in the location of my second mouse click,
>>>> but the drawn edge of the circle is about 1 degree further out. The
>>>> distance of the distortion increases the further away from the
>>>> equator I place the circle. The problem persists at lower levels of
>>>> zoom, although the ratio of distances stays the same, just the
>>>> scale changes. For instance at a 100k zoom level the circle edge
>>>> would be drawn about 1k further out than it should be.
>>>>
>>>> I hope this helps make the problem clearer... it is easier to see
>>>> than to describe in words!
>>>>>
>>>>> OMCircles created with distance radius shouldn't appear as circles
>>>>> in certain projections when you move away from the equator. Pixel
>>>>> distance from the center will vary along the circle edge for the
>>>>> same distance (depends on latitude, angle on edge from center).
>>>> I realize this. In fact, the problem I am trying to describe is
>>>> actually drawing the circle as far more circular than it actually
>>>> should be. The handle I am laying down shows that the circle is
>>>> slightly off from where it should be. I am going to go out on a
>>>> limb here and hypothesize that what it looks like is the 800m
>>>> difference between 1 degree lat and 1 degree lon is not being taken
>>>> into account. Feel free to slap me if I am wrong on that one!
>>>>>
>>>>>>
>>>>>> Another problem I would like to bring up is when zoomed in to a
>>>>>> small area (~1m scale) the OMCircle draws as a polygon
>>>>>> approximation of a circle. Is there a way to increase the number
>>>>>> of segments being drawn at that low of scale?
>>>>>>
>>>>>
>>>>> OMCircles let you set the number of segments used to represent the
>>>>> circle, but you might be seeing a precision problem that occurs
>>>>> from using floats in the OMCircle. The next version of OpenMap
>>>>> will address the precision problem.
>>>>>
>>>>> Hope this helps,
>>>>>
>>>>> Don
>>>>>
>>>>> --
>>>>> [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"]
>>>>
>>>> I hope this clarifies things a little for you. If not let me know
>>>> and I can either clarify more or post some code if that would help.
>>>>
>>>> Thanks,
>>>>
>>>> Chris
>>>>
>>>> --
>>>> [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"]
>>>
>>> --
>>> [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"]
>>
>> <not_offset.jpg><offset.jpg>
>
> --
> [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"]

--
[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 Wed Jul 30 2008 - 10:24:12 EDT

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