在多边形中需要重复最后的起点,以便在数组后面输入GeoJSON:
{
"type": "Polygon",
"coordinates": [
[
[15.99609375, 62.0215281910076],
[-9.140625, 51.1793429792893],
[12.12890625, 37.0200982013681],
[44.12109375, 37.7185903255882],
[49.5703125, 59.5343180010956],
[15.99609375, 62.0215281910076]
]
]
}
在我的代码中,我不重复它并从我的地图中获取:
{
"type": "Polygon",
"coordinates": [
[
[15.99609375, 62.0215281910076],
[-9.140625, 51.1793429792893],
[12.12890625, 37.0200982013681],
[44.12109375, 37.7185903255882],
[49.5703125, 59.5343180010956]
]
]
}
你能告诉我,我怎样才能在数组末尾添加第一个值arr [0]?
for(var i = 0; i < arr.length; i++)
{
shape=arr[i];
tmp=new goo.Polygon({paths:this.mm_(shape.geometry)});
break;
tmp.setValues({map:map,id:shape.id})
shapes.push(tmp);
}
return shapes;
整个代码如下所示:
<script type='text/javascript'>//<![CDATA[
function initialize()
{
var goo = google.maps,
map_in = new goo.Map(document.getElementById('map_in'),
{ zoom: 6,
center: new goo.LatLng(52.344, 18.048)
}),
shapes = [],
selected_shape = null,
// drawman = new goo.drawing.DrawingManager({map:map_in}),
drawman = new google.maps.drawing.DrawingManager({
map: map_in,
drawingMode: goo.drawing.OverlayType.POLYGON,
drawingControl: true,
drawingControlOptions: {
position: goo.ControlPosition.TOP_CENTER,
drawingModes: [goo.drawing.OverlayType.POLYGON]
}
})
byId = function(s){return document.getElementById(s)},
clearSelection = function(){
if(selected_shape){
selected_shape.set((selected_shape.type
===
google.maps.drawing.OverlayType.MARKER
)?'draggable':'editable',false);
selected_shape = null;
}
},
setSelection = function(shape){
clearSelection();
selected_shape=shape;
selected_shape.set((selected_shape.type
===
google.maps.drawing.OverlayType.MARKER
)?'draggable':'editable',true);
},
clearShapes = function(){
for(var i=0;i<shapes.length;++i){
shapes[i].setMap(null);
}
shapes=[];
};
// map_in.bindTo('center',map_out,'center');
// map_in.bindTo('zoom',map_out,'zoom');
goo.event.addListener(drawman, 'overlaycomplete', function(e) {
var shape = e.overlay;
shape.type = e.type;
goo.event.addListener(shape, 'click', function() {
setSelection(this);
});
setSelection(shape);
shapes.push(shape);
});
goo.event.addListener(map_in, 'click',clearSelection);
goo.event.addDomListener(byId('clear_shapes'), 'click', clearShapes);
goo.event.addListener(drawman, 'overlaycomplete', function(){
var data=IO.IN(shapes,false);byId('data').innerHTML=JSON.stringify(data[0]);});
}
var IO={
//returns array with storable google.maps.Overlay-definitions
IN:function(arr,//array with google.maps.Overlays
encoded//boolean indicating whether pathes should be stored encoded
){
var shapes = [],
goo=google.maps,
shape,tmp;
for(var i = 0; i < arr.length; i++)
{
shape=arr[i];
tmp={type:this.t_(shape.type),id:shape.id||null};
switch(tmp.type){
case 'POLYGON':
tmp.coordinates=this.m_(shape.getPaths(),encoded);
break;
}
shapes.push(tmp);
}
return shapes;
},
//returns array with google.maps.Overlays
OUT:function(arr,//array containg the stored shape-definitions
map//map where to draw the shapes
){
var shapes = [],
goo=google.maps,
map=map||null,
shape,tmp;
for(var i = 0; i < arr.length; i++)
{
shape=arr[i];
tmp=new goo.Polygon({paths:this.mm_(shape.geometry)});
break;
tmp.setValues({map:map,id:shape.id})
shapes.push(tmp);
}
return shapes;
},
l_:function(path,e){
path=(path.getArray)?path.getArray():path;
if(e){
return google.maps.geometry.encoding.encodePath(path);
}else{
var r=[];
for(var i=0;i<path.length;++i){
r.push(this.p_(path[i]));
}
return r;
}
},
ll_:function(path){
if(typeof path==='string'){
return google.maps.geometry.encoding.decodePath(path);
}
else{
var r=[];
for(var i=0;i<path.length;++i){
r.push(this.pp_.apply(this,path[i]));
}
return r;
}
},
m_:function(paths,e){
var r=[];
paths=(paths.getArray)?paths.getArray():paths;
for(var i=0;i<paths.length;++i){
r.push(this.l_(paths[i],e));
}
return r;
},
mm_:function(paths){
var r=[];
for(var i=0;i<paths.length;++i){
r.push(this.ll_.call(this,paths[i]));
}
return r;
},
p_:function(latLng){
return([latLng.lng(),latLng.lat()]);
},
pp_:function(lat,lng){
return new google.maps.LatLng(lng,lat);
},
b_:function(bounds){
return([this.p_(bounds.getSouthWest()),
this.p_(bounds.getNorthEast())]);
},
bb_:function(sw,ne){
return new google.maps.LatLngBounds(this.pp_.apply(this,sw),
this.pp_.apply(this,ne));
},
t_:function(s){
var t=['CIRCLE','MARKER','RECTANGLE','POLYLINE','POLYGON'];
for(var i=0;i<t.length;++i){
if(s===google.maps.drawing.OverlayType[t[i]]){
return t[i];
}
}
}
}
google.maps.event.addDomListener(window, 'load', initialize);
//]]>
</script>
答案 0 :(得分:1)
这样的东西?
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="5" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<TabControl x:Name="tabControl">
<TabItem Header="Општи подаци">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="5" />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="5" />
<RowDefinition Height="Auto" />
<RowDefinition Height="5" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Label x:Name="label"
Content="Кључ:" />
<Label x:Name="label_Copy"
Content="Повезивање:"
Grid.Row="2" />
<Label x:Name="label_Copy1"
Content="Линк за слику 1:"
Grid.Row="4" />
<TextBox x:Name="textBoxKljuc"
Grid.Column="2"
TextWrapping="Wrap"
IsEnabled="False" />
<TextBox x:Name="textBoxPovezivanje"
Grid.Column="2"
Grid.Row="2"
TextWrapping="Wrap"
IsEnabled="False" />
<TextBox x:Name="textBoxLinkZaSliku1"
Grid.Column="2"
Grid.Row="4"
TextWrapping="Wrap"
Background="#FFECE7B7" />
</Grid>
</TabItem>
</TabControl>
<StackPanel Orientation="Horizontal"
HorizontalAlignment="Right"
Grid.Row="2">
<Button x:Name="buttonSnimiObjekat"
Content="Измени" />
<Button x:Name="buttonOdustani"
Content="Откажи" />
</StackPanel>
</Grid>
答案 1 :(得分:0)
所以我终于找到了方法,如何解决这个问题。因为我注意到有一个非常流行的bug(Polygon需要关闭 - 第一个loc需要在最后重复)我决定在这里分享修复。 您需要添加以下行:
r.push(this.p_(path[0]));
到l_功能:
l_:function(path,e){
path=(path.getArray)?path.getArray():path;
if(e){
return google.maps.geometry.encoding.encodePath(path);
}else{
var r=[];
for(var i=0;i<path.length;++i){
r.push(this.p_(path[i]));
}
r.push(this.p_(path[0]));
return r;
}
},