есть ли шанс изменить проекцию на геойсон (mapshaper) - PullRequest
0 голосов
/ 28 февраля 2019
  • Привет всем,
  • Я использую OpenLayers 5, Angular 6, инструмент maphaper (преобразование shp в json).
  • MapshaperTool , Git Code

мой процесс

  • я установил npm mapshaper --save
  • Я могу загружать разные файлы .shp и получать данные о функциях json.

  • У меня есть 2 разных файла .shp [layer-ind.shp, layer-Administration.shp]

  • файл layer-ind.shp загрузил свой json-файл как

{ "type": "FeatureCollection", "features": [ { "type": "Feature", "properties": {}, "geometry": { "type": "LineString", "coordinates": [ [ 75.89355468749999, 18.521283325496277 ], [ 80.6396484375, 19.68397023588844 ] ] } } ] }

  • файл layer-us.shpзагруженный файл json выдает примерно

{ "type": "FeatureCollection", "features": [ { "type":"Feature", "geometry":{ "type":"LineString", "coordinates":[ [-349771.1875,445307.8125], [-349789.6875,445314.375], [-349796.5625,445321.5625], [-349792.78119999915,445341.4375], [-349786.53119999915,445351.71880000085], [-349771.1875,445307.8125]]}, "properties":{ "TYPE":"ISLAND","RuleID":3, "Shape_Leng":544.475438955 } } ] }

при предварительном просмотре этих двух слоев (объектов) предварительного просмотра на карте 1. Файл layer-ind.json дает правильные результаты и может видеть слой накарта в правильном месте 2. Файл layer-us.json дает неправильное место, показывая на карте (0,0)

  • , как решить эту проблему 2nd point layer-us.json, я должен изменить ре-проекция также как

const vectorSource = new VectorSource({ features: (new GeoJSON()).readFeatures(geojson, { featureProjection: 'EPSG:4326' }); });

  • Я также изменил код FeatureProjection, но он не работает layer-us.json.
  • , пожалуйста, помогите в этом

  • спаси мои дни

1 Ответ

0 голосов
/ 28 февраля 2019

Вам нужно будет указать проекцию данных, а также проекцию объекта.featurePprojection - это проекция вашей карты.dataProjection - проекция координат в json.Я вижу, что dataProjection для layer-ind - это «EPSG: 4326», dataProjection для layer-us, похоже, использует координаты локальной проекции.Знаете ли вы, какая проекция или где находится остров?

const vectorSource = new VectorSource({
        features: (new GeoJSON()).readFeatures(geojson, {
        dataProjection: 'xxxx',
        featureProjection: 'yyyy'
      })
    });

На основе приведенного вами определения проекции приведен рабочий пример (для запуска здесь используется полный синтаксис сборки)

proj4.defs('NAD_1983_California_Teale_Albers', 'PROJCS["NAD_1983_California_Teale_Albers",GEOGCS["GCS_North_American_1983",DATUM["D_North_American_1983",SPHEROID["GRS_1980",6378137.0,298.257222101]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Albers"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",-4000000.0],PARAMETER["Central_Meridian",-120.0],PARAMETER["Standard_Parallel_1",34.0],PARAMETER["Standard_Parallel_2",40.5],PARAMETER["Latitude_Of_Origin",0.0],UNIT["Meter",1.0]]');

ol.proj.proj4.register(proj4);

geojson = {
  "type": "FeatureCollection",
  "features": [
{
  "type":"Feature",
  "geometry":{
    "type":"LineString",
    "coordinates":[
      [-349771.1875,445307.8125],
      [-349789.6875,445314.375],
      [-349796.5625,445321.5625],
      [-349792.78119999915,445341.4375],
      [-349786.53119999915,445351.71880000085],
      [-349771.1875,445307.8125]]},
  "properties":{
    "TYPE":"ISLAND","RuleID":3,
    "Shape_Leng":544.475438955
  }
}
  ]
}

var map = new ol.Map({
  layers: [ new ol.layer.Tile({ source: new ol.source.OSM() }) ],
  target: 'map',
  view: new ol.View()
});


const vectorSource = new ol.source.Vector({
    features: (new ol.format.GeoJSON()).readFeatures(geojson, {
    dataProjection: 'NAD_1983_California_Teale_Albers',
    featureProjection: map.getView().getProjection()
  })
});


map.addLayer(new ol.layer.Vector({source: vectorSource}));

map.getView().fit(vectorSource.getExtent());
<link href="https://cdn.rawgit.com/openlayers/openlayers.github.io/master/en/v5.3.0/css/ol.css" rel="stylesheet" />
<script src="https://cdn.rawgit.com/openlayers/openlayers.github.io/master/en/v5.3.0/build/ol.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/proj4js/2.5.0/proj4.js"></script>

<div id="map" class="map"></div>
...