Wrapping is fundamental to the Maps API, since afterall the world wraps.
 But you can hide that wrapping by using a small longitudinal range and
zooming in, so that the wrapping is hidden way offscreen to the left/right.

But I see the issue you describe: your custom projection does not seem to
take effect until the map type changes away and back again.  Do you have a
simpler example page that demonstrates this issue?

On Wed, Mar 10, 2010 at 9:17 AM, Brak <[email protected]> wrote:

> After spending a week and a half scratching my head with various
> examples I scrapped it and found a new one to work from.
> Coincidentally it was written by this board's very own Ben Appleton!
>
> It properly maps the original 256x256 starting tile to top letf:
> 90,-180 by bottom right: -90,180 lat/lng coordinates. It also provides
> a way to alter the scale if you so desire. Thanks so much Mr.
> Appleton! Code included below.
>
> So now I've got a new problem, now that all my coordinates are mapped
> and all is good in the projection world. My map (
>
> http://library.ucf.edu/Administration/Maps/Default_unpublished.asp?develop=1
> ) initializes with one of my custom map types, which has been setup to
> use the custom projection. However, when the map draws for the first
> time it's still using the default mercator projection. Switching from
> and back to one of the custom map types invokes the new Euclidean
> projection, as well as any subsequent time, the way it's supposed to.
> (Maps JS file: http://library.ucf.edu/Web/Js/Maps.js )
> It feels like I need to move some of my code around so the map knows
> to use the new projection instead of the default, but I'm not sure
> which code needs to move. I've tried moving the relevant code, but it
> didn't seem to have any effect. (Relevant code being anything that
> refers to a LatLng() coordinate on the custom maps.)
>
> I feel like I'm so close to getting it right. I just need a little
> guidance in the right direction.
>
> In a separate issue, I don't really understand how to tell the
> polygons and markers to not wrap, and just stay on the original map
> region.
>
> P.S. The computer status polygons on the floormaps have not been
> remapped since the new flat projection was finished.
>
> function EuclideanProjection() {
>        var EUCLIDEAN_RANGE = 256;
>        this.pixelOrigin_ = new google.maps.Point(EUCLIDEAN_RANGE / 2,
> EUCLIDEAN_RANGE / 2);
>        this.pixelsPerLonDegree_ = EUCLIDEAN_RANGE / 360;
>        this.pixelsPerLonRadian_ = EUCLIDEAN_RANGE / (2 * Math.PI);
>        this.scaleLat = 2;      // Height - multiplication scale factor
>        this.scaleLng = 1;      // Width - multiplication scale factor
>        this.offsetLat = 0;     // Height - direct offset +/-
>        this.offsetLng = 0;     // Width - direct offset +/-
> };
>
> EuclideanProjection.prototype.fromLatLngToPoint = function(latLng,
> opt_point) {
>        var point = opt_point || new google.maps.Point(0, 0);
>
>        var origin = this.pixelOrigin_;
>        point.x = (origin.x + (latLng.lng() + this.offsetLng ) *
> this.scaleLng * this.pixelsPerLonDegree_);
>        // NOTE(appleton): Truncating to 0.9999 effectively limits latitude
> to
>        // 89.189.  This is about a third of a tile past the edge of the
> world tile.
>        point.y = (origin.y + (-1 * latLng.lat() + this.offsetLat ) *
> this.scaleLat * this.pixelsPerLonDegree_);
>        return point;
> };
>
> EuclideanProjection.prototype.fromPointToLatLng = function(point) {
>        var me = this;
>
>        var origin = me.pixelOrigin_;
>        var lng = (((point.x - origin.x) / me.pixelsPerLonDegree_) /
> this.scaleLng) - this.offsetLng;
>        var lat = ((-1 *( point.y - origin.y) / me.pixelsPerLonDegree_) /
> this.scaleLat) - this.offsetLat;
>        return new google.maps.LatLng(lat , lng, true);
> };
>
> // Apply it with this
> myCustomMapType.prototype.projection = new EuclideanProjection();
>
>
>
> On Feb 23, 11:58 am, Brak <[email protected]> wrote:
> > I too am interested in this functionality for my custom maps. I would
> > love to build a custom projection for my custom maps that is just 1:1,
> > but I could live with the LatLng system. My only problem with that
> > system is that, using the mercator projection, the world wraps and I
> > need to find a way for my polygons, polylines, markers and infoboxes
> > to not appear in empty space when zoomed out. I'm assuming that a 1:1
> > could be a solution to this, but all I can do is guess at this point.
> >
> > I tried fiddling with your example code using it as a basis and I
> > couldn't get it into a state that Google Maps could make any sense of.
> > Without any documentation on how the projections are supposed to be
> > formulated I'm sort of at a loss.
> >
> > Alternatively, can you think of any way to simply disable tiling and
> > subsequently drawing the overlays outside of the "home tile" (tile 0,0
> > at zoom level 0)?. I also have a "Center Map" Control button that is
> > supposed to center the map, but it's expecting a wrapping world too
> > and will center on a non-existent adjacent tile if the map is scooted
> > too far left or right.
> >
> > evilC: Did you ever get your projection to work? How is your map
> > system coming along?
> >
> > On Jan 25, 6:08 pm, Ben Appleton <[email protected]> wrote:
> >
> >
> >
> > > On Tue, Jan 26, 2010 at 9:15 AM, evilC <[email protected]> wrote:
> > > > I have a reasonable amount of experience with the Google Maps API,
> but
> > > > none so far with custom map types and I have been asked to help to
> > > > make a map of an online game world (http://navemap.com).
> >
> > > > Now from my research, it seems that the smart move would be to
> > > > properly integrate the game's coordinate system into the map so that
> > > > things are all accurate. AFAIK, the game world is in effect flat. I
> am
> > > > not yet sure on wrapping, there may be e/w wrapping (So it may in
> > > > effect be a cylinder). I think the origin is in the centre of the
> map,
> > > > with negative values for west and north of the origin.
> >
> > > OK.  The Maps API uses latitude/longitude coordinates, which are
> > > cylindrical.  That is, there is e/w wrapping but no n/s wrapping.  If
> your
> > > game coordinates do not wrap e/w, then you can either:
> > > 1 - Avoid the +/- 180 longitude line by placing your game map from -90
> to
> > > +90 longitude.  No-one is likely to pan so far offscreen that they
> notice
> > > the world wraps.
> > > 2 - Or, listen for Map event "center_changed" and if the map pans
> outside
> > > -90 to +90 longitude just setCenter() to the nearest point back inside
> these
> > > bounds.
> >
> > > So from reading the API documentation, it seems to me that I do not
> >
> > > > want to use a projection? Or if the map insists on one, a plain 1:1
> > > > conversion from world coordinates to map coordinates?
> >
> > > Yes, a plain 1:1 conversion would do.  So I suggest using
> > > ImageMapType<
> http://code.google.com/apis/maps/documentation/v3/reference.html#Imag...>
> > > to
> > > download your map tiles, and attach a .projection object like:
> >
> > > var myMapType = new ImageMapType(...);
> >
> > > var myProjection = {};
> > > myProjection.fromLatLngToPoint = function(latLng) {
> > >   return new Point(latLng.lng(), latLng.lat());};
> >
> > > myProjection.fromPointToLatLng = function(point) {
> > >   return new LatLng(point.y, point.x);
> >
> > > };
> >
> > > // Set the projection for custom map type:
> > > myMapType.projection = new MyProjection;
> >
> > > Now this is a bit oversimplified: you'll have to tweak the projection
> so
> > > that eg. markers are placed in the right positions on your tiles,
> otherwise
> > > all your overlays will be misaligned.
> >
> > > > Either that, or will it work properly if I just map game world
> > > > coordinates to lat and lng? I am worried about the effects of the
> > > > mercator projection on a world which is not spherical.
> >
> > > > Please advise.
> >
> > > > --
> > > > 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%[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%[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