On Aug 29, 4:41 pm, Ben Appleton <[email protected]> wrote:
> On Sat, Aug 28, 2010 at 7:04 AM, [email protected]
> <[email protected]>wrote:
> > On Aug 27, 10:00 am, Ben Appleton <[email protected]> wrote:
> > > Larry,
>
> > > 1: 'projection_changed' fires when the map module loads and binds the
> > > MapType.  Until that point the JS doesn't know the Projection that will
> > be
> > > used.
>
> > Is there any other way to tell when it is loaded?  This means if I
> > want to use the projection in the GetPoint(s)AtDistance function, I
> > have to do my map initialization in 2 steps:
>
> > 1. initialize the map object in the body onload function
> > 2. initialize any polylines, points or markers that depend on
> > GetPoint(s)AtDistance/the projection in another "projection" onload
> > function.
>
> True.  But since the midpoint depends on the projection, you have to handle
> changes to the projection regardless.
>
> > Is there some kind of a "map" onload event the will tell me when
> > everything is ready?
>
> > This is another instance where some things aren't available right
> > away, it has come up before with map.getBounds not being useful until
> > sometime after the map has been created:
>
> >http://groups.google.com/group/google-maps-js-api-v3/browse_frm/threa...
>
> > It seem like this could make for nasty dependencies.  Is there a
> > general solution?
>
> In a sense there are 2 general solutions:
> 1 - If you have a function that depends on some properties, such as
> projection or bounds, you should re-evaluate that function when they
> change.

The issue is that people want to create maps, put markers on them,
draw polylines,... and the way it is set up, a detailed understanding
of the underlying implementation is required (and at this point those
details don't seem to be described in the documentation, but maybe I
don't know where to look).  How do we know what properties functions
depend on?

It doesn't just work, for something as simple as putting a marker on a
polyline in a way that will always work.  I can use the "simple"
algorithm that doesn't depend on the projection, but that won't do the
right thing in all cases.  If I use the correct algorithm, I can't use
it until after the map has completed initialization.


> 2 - If our API makes it tedious to do simple things, we should improve our
> API.
> We have held off making the bounds synchronously available, as that depends
> on the projection, which depends on the maptype, which requires loading a
> bunch more code upfront.

I don't know the right answer, I just know that the way it is
currently implemented is going to cause confusion.  This is now the
version of the API you want "everyone" to use.

Is there an event available when the map has finished initializing
(everything is available)?  That would make a 2-stage initialization
easier, create the map when the onload function runs, then add all the
contents when the "map ready" (or whatever) event fires.

  -- Larry



> > > 2: the if(!projection) will happen if the MapType is set back to
> > > null/undefined.  This is probably unusual so it is defensive programming.
> > > 3: this will work at all scales.  It never interpolates across the
> > dateline
> > > though, which can be fixed by checking if it is shorter to cross the
> > > dateline then unwrapping the longitudes before projecting.
> > > I'm not sure of the exact definition of a thumb line, it's possible
> > Mike's
> > > code is correct for a different purpose.  I'd need to look it up.
>
> > > Cheers
> > > Ben
>
> > > On 27 Aug 2010 22:43, "[email protected]" <[email protected]>
> > wrote:
>
> > > > On Aug 26, 10:12 pm, Ben Appleton <[email protected]> wrote:
> > > >> On Fri, Aug 27, 2010 at 2:59 PM, [email protected]
> > > >> <[email protected]>wrote:
>
> > > >> > On Aug 26, 9:53 pm, "[email protected]" <[email protected]>
> > > >> > wrote:
> > > >> > > On Aug 26, 9:26 pm, Ben Appleton <[email protected]> wrote:
>
> > > >> > > > On Fri, Aug 27, 2010 at 2:17 PM, [email protected]
> > > >> > > > <[email protected]>wrote:
>
> > > >> > > > > On Aug 26, 7:49 pm, xf_aicn <[email protected]
>
> > > >> > wrote:
> > > >> > > > > > Hi all,
>
> > > >> > > > > > Now i'm doing a project that connect two place with a
> > > >> > > > > > polyline(geodesic is true), and then at the same time, show
> > a
> > > >> > marker
> > > >> > > > > > on the middle of the polyline, how can I do this? I can't
> > get
> > > the
> > > >> > > > > > coordinate on thepolyline
>
> > > >> > > > >http://www.geocodezip.com/v3_polyline_example_geodesic.html
>
> > > >> > > > > Seems to be off the "native" google geodesic polyline.  Don't
> > > know
> > > >> > > > > why.
>
> > > >> > > > The geodesic marker looks OK me in Chrome/WinXP.  I've attempted
> > to
> > > >> > attach
> > > >> > > > an image, though I do not know if groups allows attachments.
>
> > > >> > > > In which browser are you seeing the problem?
>
> > > >> > > IE6 (and Chrome, FF; Opera doesn't seem to want to show the map),
> > but
> > > >> > > click on the marker then "zoom in" to see the difference in the
> > > >> > > polylines (the green polyline is the "native" google maps one, the
> > > red
> > > >> > > is the one that was calculated).  How are the "native" geodesic
> > > >> > > polylines rendered?
>
> > > >> > Oops, missed this part of your question:
> > > >> > > For the "normal" polyline did you average in LatLng space or
> > > projected
> > > >> > > coordinates?  I couldn't spot it at a glance of your code.
>
> > > >> > I just ported Mike Williams' epoly GetPointAtDistance, which just
> > does
> > > >> > a a linear interpolation on lat and lng.
>
> > > >> > Do you have a reference to a more accurate way?
>
> > > >> Try something along these lines (no pun intended):
>
> > > >> var map = new google.maps.Map(...);
> > > >> var startMarker = new google.maps.Marker(...);
> > > >> var endMarker = new google.maps.Marker(...);
> > > >> var midMarker = new google.maps.Marker(...);
>
> > > > Ben,
> > > > Some questions on this:
> > > > 1. What causes the projection_changed event to fire? Is that always
> > > > going to fire on map initialization?
> > > > 2. Is the "(!projection) return", just there as good programming
> > > > practice? Or is it likely that there won't be a projection in a
> > > > "normal" v3 google map?
> > > > 3. Will this work at all scales? Or is it better to use it only in
> > > > some cases? I'm wondering if I should use it in my port of Mike
> > > > Williams' epoly extension for better accuracy.
>
> > > > Thank you,
> > > > Larry
>
> > > >> google.maps.event.addListener(map, 'projection_changed', function() {
> > > >>   var projection = map.getProjection();
> > > >>   if (!projection) return;
>
> > > >>   // Project
> > > >>   var startLatLng = startMarker.getPosition();
> > > >>   var endLatLng = endMarker.getPosition();
> > > >>   var startPoint = projection.fromLatLngToPoint(startLatLng);
> > > >>   var endPoint = projection.fromLatLngToPoint(endLatLng);
>
> > > >>   // Average
> > > >>   var midPoint = new google.maps.Point(
> > > >>       (startPoint.x + endPoint.x) / 2,
> > > >>       (startPoint.y + endPoint.y) / 2);
>
> > > >>   // Unproject
> > > >>   var midLatLng = projection.fromPointToLatLng(midPoint);
> > > >>   midMarker.setPosition(midLatLng);
>
> > > >> });
>
> > > >>     -- Larry
>
> > > >> > > > The center marker on the "normal" polyline seems off as well.
>
> > > >> > > > For the "normal" polyline did you average in LatLng space or
> > > projected
> > > >> > > > coordinates?  I couldn't spot it at a glance of your code.
>
> > > >> > > > >  -- Larry
>
> > > >> > > > > --
> > > >> > > > > You received this message because you are subscribed to the
> > > Google
> > > >> > Groups
> > > >> > > > > "Google Maps JavaScript API v3" group.
> > > >> > > > > To post to this group, send email to
> > > >> > > > > [email protected].
> > > >> > > > > To unsubscribe from this group, send email to
> > > >> > > > > [email protected]<google-maps-js-api-v3%2B
> > > >> > > > >  [email protected]>
> > <google-maps-js-api-v3%2b­[email protected]
> > ><google-maps-js-api-v3%2B
>
> > > [email protected]><google-maps-js-api-v3%2B
>
> > > >> > [email protected]>
> > > >> > > > > .
> > > >> > > > > For more options, visit this group at
> > > >> > > > >http://groups.google.com/group/google-maps-js-api-v3?hl=en.
>
> > > >> > > >  geodesic_markers.PNG
> > > >> > > > 116KViewDownload
>
> > > >> > --
> > > >> > You received this message because you are subscribed to the Google
> > > Groups
> > > >> > "Google Maps JavaScript API v3" group.
> > > >> > To post to this group, send email to
> > > >> > [email protected].
> > > >> > To unsubscribe from this group, send email to
> > > >> > [email protected]<google-maps-js-api-v3%2B
> > > >> >  [email protected]>
> > <google-maps-js-api-v3%2b­[email protected]
> > ><google-maps-js-api-v3%2B
>
> > > [email protected]>>> > .
> > > >> > For more options, visit this group at
> > > >> >http://groups.google.com/group/google-maps-js-api-v3?hl=en.
>
> > > > --
> > > > You received this message because you are subscribed to the Google
> > Groups
>
> > > "Google Maps JavaScript API v3" group.> To post to this group, send email
> > to
>
> > > [email protected].> To unsubscribe from this group,
> > send email to
>
> > > [email protected]<google-maps-js-api-v3%2B
> > >  [email protected]>
> > <google-maps-js-api-v3%2b­[email protected]>
> > > .> For more options, visit this group at
>
> > >http://groups.google.com/group/google-maps-js-api-v3?hl=en.
>
> > > - Hide quoted text -
>
> > > - Show quoted text -- Hide quoted text -
>
> > > - Show quoted text -- Hide quoted text -
>
> > > - Show quoted text -
>
> > --
> > You received this message because you are subscribed to the Google Groups
> > "Google Maps JavaScript API v3" group.
> > To post to this group, send email to
> > [email protected].
> > To unsubscribe from this group, send email to
> > [email protected]<google-maps-js-api-v3%2B 
> > [email protected]>
> > .
> > For more options, visit this group at
> >http://groups.google.com/group/google-maps-js-api-v3?hl=en.

-- 
You received this message because you are subscribed to the Google Groups 
"Google Maps JavaScript API v3" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/google-maps-js-api-v3?hl=en.

Reply via email to