You are not logged in.

Announcement

*** NOTICE: forum.openstreetmap.org is being retired. Please request a category for your community in the new ones as soon as possible using this process, which will allow you to propose your community moderators.
Please create new topics on the new site at community.openstreetmap.org. We expect the migration of data will take a few weeks, you can follow its progress here.***

#1 2013-04-08 15:17:43

Ghostrider82
Member
Registered: 2010-05-25
Posts: 132

Rechteck

Hallo zusammen,

ich scheine mal wieder an den einfachsten Dingen des Alltages zu scheitern.

Ich versuche, ein Rechteck auf eine Karte zu "zeichnen".



var box_extents = [[53, 11, 56, 12]];
                        
                        
                                var boxes  = new OpenLayers.Layer.Boxes( 'Boxes' );
                        
                                    for (var i = 0; i < box_extents.length; i++) {
                                       ext = box_extents[i];
                                        bounds = OpenLayers.Bounds.fromArray(ext);
                                        box = new OpenLayers.Marker.Box(bounds);
                                        box.events.register('click', box, function (e) {
                                            this.setBorder('yellow');
                                        });
                                        boxes.addMarker(box);
                                    }
                        
                                    map.addLayers([boxes]);

                   

Doch egal, was ich an Koordinaten angebe, ich lande vor Afrika.

Ich wäre hier für einen Tip dankbar, woran es haken könnte.

Vielen Dank im Voraus

Offline

#2 2013-04-08 15:47:00

efred
Member
From: Düdingen
Registered: 2010-01-17
Posts: 1,856
Website

Re: Rechteck

Schau mal den Quellcode von diesem Beispiel an: http://openlayers.org/dev/examples/boxes-vector.html

vielleicht hilf das weiter.


My Profiles in OSM and in OSM-Wiki | my G+

Offline

#3 2013-04-08 16:08:24

g0ldfish
Member
Registered: 2009-04-27
Posts: 293

Re: Rechteck

Ist so ein bisschen ins Blaue hinein, aber es käme auch ein Projektionsproblem in Frage:

Wenn die Karte nicht so aussieht wie im von efred verlinkten Bsp. (höhere Breitengraden gestaucht), sondern "wie man es gewohnt ist" (Merkartor-Projektion), müssten m.E. die Werte deutlich größer sein, etwa so wie diese hier (mit noch ein bisschen Erläuterungen, das kann Mr Wolf besser als ich):
http://forum.openstreetmap.org/viewtopic.php?id=15307
(bzw. wenn sie so nicht vorliegen, müssen sie in diese Projektion transformiert werden)

Die kleinen Werte würden sonst nahe 0,0 (vor Ghana) abgebildet.

Offline

#4 2013-04-08 16:11:15

Ghostrider82
Member
Registered: 2010-05-25
Posts: 132

Re: Rechteck

Vors Init

var box_extents = [
                [-10, 50, 5, 60],
                [-75, 41, -71, 44],
                [-122.6, 37.6, -122.3, 37.9],
                [10, 10, 20, 20]
            ]; 
    var map;

Ins Init

var boxes  = new OpenLayers.Layer.Vector( "Boxes" );
    
                for (var i = 0; i < box_extents.length; i++) {
                    ext = box_extents[i];
                    bounds = OpenLayers.Bounds.fromArray(ext);
                    
                    box = new OpenLayers.Feature.Vector(bounds.toGeometry());
                    boxes.addFeatures(box);
                }

                map.addLayers([ol_wms, boxes]);
                map.addControl(new OpenLayers.Control.LayerSwitcher());
                var sf = new OpenLayers.Control.SelectFeature(boxes);
                map.addControl(sf);
                sf.activate();
                map.zoomToMaxExtent();

Dann ist der Browser leider nicht gewillt, ein Rechteck anzuzeigen.

Könnte es am

map = new OpenLayers.Map('map');

                var ol_wms = new OpenLayers.Layer.WMS( "OpenLayers WMS",
                    "http://vmap0.tiles.osgeo.org/wms/vmap0?", {layers: 'basic'} );

liegen, was ich nicht übernehme?

Offline

#5 2013-04-08 16:14:55

maxbe
Member
Registered: 2010-01-19
Posts: 3,255
Website

Re: Rechteck

Wenn Du vor Afrika bei bei (0,0) landest, hast Du entweder Koordinaten von (0,0) oder Du hast irgendwo ein

.transform(new OpenLayers.Projection("EPSG:4326"), new OpenLayers.Projection("EPSG:900913"));

vergessen. Ausserdem hast Du die Koordinaten in der falschen Reihenfolge (falls die Box in Deutschland sein soll).  So z.B. würde es gehn.

Grüße, Max

PS: Der Unterschied zwischen dem openlayers-Beispiel und meinem ist, dass die dort eine Plattkarte haben, mit (Längengrad/Breitengrad). OSM ist in Mercator. Das misst in soetwas ähnlichem wie "Meter" und wenn Du eine Box mit (53, 11, 56, 12) malst, ist die nur 1m breit und 3m hoch und wirkt sehr klein auf der Weltkarte.

Nachtrag: Und da das Beispiel wegen Provider kaputt grad nicht erreichbar ist:

var box_extents = [[11,53,12,56],[12.5,53.5,14.5,56.5]];
var boxes  = new OpenLayers.Layer.Boxes('Boxes');
for (var i = 0; i < box_extents.length; i++) {
  ext = box_extents[i];
  bounds = OpenLayers.Bounds.fromArray(ext);
  bounds.transform(new OpenLayers.Projection("EPSG:4326"), new OpenLayers.Projection("EPSG:900913"));
  box = new OpenLayers.Marker.Box(bounds);
  boxes.addMarker(box);
}

Last edited by maxbe (2013-04-09 08:52:06)

Offline

#6 2013-04-09 07:00:46

efred
Member
From: Düdingen
Registered: 2010-01-17
Posts: 1,856
Website

Re: Rechteck

@Ghostrider... Ich habe es mir nochmals kurz angeschaut. Hierzu sollte man folgendes wissen:Wo neben Afrika landest Du mit den Koordinaten 53,11,56,12? Irgendwo bei 0,0 oder doch eher neben Somalia im Meer?

Wenn Du neben Somalia landest - was ich vermute - musst Du nur die Koordinaten anders setzen:Mit var box_extents = [[11, 53, 12, 56]]; statt var box_extents = [[53, 11, 56, 12]]; sollte das Rechteck nicht mehr neben Afrika sein, sondern in Norddeutschland.


My Profiles in OSM and in OSM-Wiki | my G+

Offline

#7 2013-04-12 12:53:48

Ghostrider82
Member
Registered: 2010-05-25
Posts: 132

Re: Rechteck

Halloo zusammen,

ihr habt mal wieder Licht ins Dunkel gebracht, ganz herzlichen Dank dafür schon einmal.

Konkret waren es die Reihenfolge der Koordinaten, ich habe dann noch ein wenig mit der Transformation herumgespielt, dann lief es wie geschmiert.

Ich versuche nun, mehrere Rechtecke aus einer Datenbank zu holen, was bis dahin auch klappt.
Auch gelingt es mir nun, diese auf die Karte zu projezieren.

Was aber merkwürdig aussieht ist, dass (ich habe 3 Rechtecke definiert->DB), Hamburg, Berlin, München.

Nun packt er mir aber 2 übereinander, das Hamburger Rechteck fehlt.

Code:

echo "var box_extents = [];
              
                  $sqlGetrechtecke = "SELECT * FROM rechtecke";
                  $queryGetrechtecke = mysql_query($sqlGetrechtecke);
                  
                  while($rowGetrechtecke = mysql_fetch_object($queryGetrechtecke))
                  {
                  $id              =         $rowGetrechtecke->id;
                  $left_down_lat              = $rowGetrechtecke->left_down_lat;
                  $left_down_lng              = $rowGetrechtecke->left_down_lng;
                  $right_up_lat         = $rowGetrechtecke->right_up_lat;
                  $right_up_lng         = $rowGetrechtecke->right_up_lng;
                  
                  echo "box_extents.push([$left_down_lng,$left_down_lat,$right_up_lng,$right_up_lat]);\r\n";
                  echo "style = new OpenLayers.Style({fillColor: '#F6FF00', fillOpacity: 0.5, strokeColor: '#FF2F00', strokeWidth: 3, fontColor: 'red', fontSize: '16px', label: 'sdfsfds $id'});\r\n";
                  echo "var boxes  = new OpenLayers.Layer.Vector('Test',{styleMap: new OpenLayers.StyleMap(style)});";
                  
                  
                  
                  echo "for (var i = 0; i < box_extents.length; i++) { 
                 
                       ext = box_extents[i];
                       bounds = OpenLayers.Bounds.fromArray(ext);
                       bounds.transform(new OpenLayers.Projection('EPSG:4326'), new OpenLayers.Projection('EPSG:900913'));
                       box = new OpenLayers.Feature.Vector(bounds.toGeometry());
                       boxes.addFeatures(box);
                       
                       map.addLayers([boxes]);
                       
                       
                }";
                  
                  }
                  echo "


Hier als Bild:

http://s14.directupload.net/images/130412/9zy3rkai.png

Ich stehe irgendwie auf dem Schlauch -.-

Last edited by Ghostrider82 (2013-04-12 12:54:12)

Offline

#8 2013-04-12 13:17:41

Ghostrider82
Member
Registered: 2010-05-25
Posts: 132

Re: Rechteck

Kommando zurück -.-

Offline

#9 2013-04-12 13:23:53

efred
Member
From: Düdingen
Registered: 2010-01-17
Posts: 1,856
Website

Re: Rechteck

Ghostrider82 wrote:

Kommando zurück -.-

? konntest Du also das Problem beheben der überlappenden Rechtecke? Was war der Fehler? (wäre vielleicht interessant, falls mal jemand anderes das gleiche Problem haben sollte).


My Profiles in OSM and in OSM-Wiki | my G+

Offline

Board footer

Powered by FluxBB