1

我动态检索具有纬度经度值的数组,这些值需要计算到一个范围中,以便它们完全适合地图(Adobe Flex)。我在 Esri 地图组件中使用的图层现在是:

<esri:ArcGISTiledMapServiceLayer id="arcgisonlineLayer" load="{trace(arcgisonlineLayer.version)}"
                                     url="http://services.arcgisonline.nl/arcgis/rest/services/Basiskaarten/PDOK_BRT/MapServer"/>   

<esri:WMSLayer url="{wmsLayerUrl}">
    <esri:visibleLayers>
        <s:ArrayList>
            <fx:String>0</fx:String><!-- background colors -->
            <fx:String>1</fx:String><!-- signs -->
            <fx:String>2</fx:String><!-- red overview road map can be outcommented-->
                <fx:String>3</fx:String><!-- lines -->
        </s:ArrayList>
    </esri:visibleLayers>
</esri:WMSLayer>

在我使用标准 Esri 层之前...

<esri:ArcGISTiledMapServiceLayer id="serviceLayer"
        url="http://server.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer" 
        visible="{viewModeButtonBar.selectedIndex == 0}"/>

<esri:ArcGISTiledMapServiceLayer 
        url="http://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer"
        visible="{viewModeButtonBar.selectedIndex == 1}"/>  

..我可以使用 WebMercatorExtent 类来创建一个适合的扩展,但现在我需要使用这些层并且不能使用 WebMercatorExtent,因为服务“ http://services.arcgisonline.nl/arcgis/rest/services /Basiskaarten/PDOK_BRT/MapServer " 使用

<esri:SpatialReference id="wgs" wkid="28992"/>

WebMercatorExtent 不适用。任何人都知道如何将此 com.esri.ags.geometry.WebMercatorExtent 转换为范围?

4

2 回答 2

1

听起来您需要将经度/纬度范围转换为空间参考 28992 中的范围,对吧?如果是这样,请参阅有关投影几何的 Flex 示例。特别是看到 projectNow 功能。它使用 GeometryService.project 将点从一个坐标系投影到另一个坐标系。您可以使用相同的功能将范围从一个坐标系投影到另一个坐标系。

于 2013-11-12T01:06:21.977 回答
1

这是它在代码中的完成方式。您需要声明为使用一些外部 Web 服务的 GeometryService。这是 Esri 的示例服务,当您阅读此答案时可能出现故障,因为已经升级。最好是使用你自己的 arcgis 服务,现在我使用了这个:

http://sampleserver6.arcgisonline.com/arcgis/rest/services/Utilities/Geometry/GeometryServer

放入声明中

<fx:Declarations>
    <esri:GeometryService id="geometryService"
                          concurrency="last"
                          fault="geometryService_faultHandler(event)"
                          projectComplete="projectCompleteHandler(event)"
                          showBusyCursor="true"
                          url="http://sampleserver6.arcgisonline.com/arcgis/rest/services/Utilities/Geometry/GeometryServer"/>
</fx:Declarations>

然后创建 WebMercatorExtent,创建一个 SpatialReference 你希望你的 Geometry 转换为并投影它。网络服务将提供答案...

                    var wmExtent:WebMercatorExtent = new WebMercatorExtent(
                    _mapItemBounds.getSouthWest().lng(),
                    _mapItemBounds.getSouthWest().lat(),
                    _mapItemBounds.getNorthEast().lng(),
                    _mapItemBounds.getNorthEast().lat());
                var outSR:SpatialReference = new SpatialReference(28992);
                const projectParameters:ProjectParameters = new ProjectParameters;
                projectParameters.geometries = [ wmExtent];
                projectParameters.outSpatialReference = outSR;
                geometryService.project(projectParameters);

...在函数中

        protected function projectCompleteHandler(event:GeometryServiceEvent):void
        {
            try
            {
                // Note: As of version 2.0, GeometryService returns geometries (instead of graphics)
                var extent:Extent = (event.result as Array)[0] as Extent;
                map.extent = extent;
            }
            catch (error:Error)
            {
                Alert.show(error.toString());
            }
        }
于 2013-11-13T07:42:00.473 回答