GithubHelp home page GithubHelp logo

boku-ilen / geodot-plugin Goto Github PK

View Code? Open in Web Editor NEW
96.0 96.0 17.0 277.95 MB

Godot plugin for loading geospatial data

License: GNU General Public License v3.0

C++ 92.03% Python 7.01% Shell 0.19% C 0.77%
gdal gdnative-plugin geospatial godot

geodot-plugin's People

Contributors

chrisgraf avatar clemens-tolboom avatar kb173 avatar mathiasbaumgartinger avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

geodot-plugin's Issues

Problem Launch Demo

I try with godot 3.1 stable ans 3.2 stable and I have these errors :

Godot Engine v3.1.2.stable.official - https://godotengine.org
OpenGL ES 3.0 Renderer: Mesa DRI Intel(R) UHD Graphics 630 (Coffeelake 3x8 GT2)
ERROR: set_locale: Unsupported locale 'C', falling back to 'en'.
At: core/translation.cpp:958.
ERROR: open_dynamic_library: Can't open dynamic library: /media/hacker/data/GODOT/PROJETS/geodot-3.2/demo/addons/geodot/x11/libgeodot.so. Error: /media/hacker/data/GODOT/VERSIONS/31/../lib/libgeodot.so: cannot open shared object file: No such file or directory
At: drivers/unix/os_unix.cpp:428.
ERROR: get_symbol: No valid library handle, can't get symbol from GDNative object
At: modules/gdnative/gdnative.cpp:488.
ERROR: init_library: No nativescript_init in "res://addons/geodot/x11/libgeodot.so" found
At: modules/gdnative/nativescript/nativescript.cpp:1504.
ERROR: start: Script does not inherit a Node: res://addons/geodot/geodot.gdns
At: main/main.cpp:1557.

Investigate possibility of only using GDALRasterIO without warping in some cases

GDALRasterIO takes image size and offset. It doesn't offer things like different types of interpolation, but in situations where this isn't required, we may be able to translate geocoordinates into pixel coordinates and use those in GDALRasterIO, skipping all the GDALWarp.

This is especially relevant for very large (e.g. 10x10 km) tiles which don't require any interpolation, but should be as fast as possible.

.a files ends up in osx dir

scons target=release osgeo_path=/usr/local/Cellar/gdal/3.2.1

find demo/addons/geodot/osx/
demo/addons/geodot/osx/
demo/addons/geodot/osx//libRasterTileExtractor.a <==================
demo/addons/geodot/osx//libgeodot.dylib
demo/addons/geodot/osx//libVectorExtractor.a <===============

This is caused by 538e2b3 somehow.

It is a little weird as libgeodot.dylib is created OK

Bundle test data for all demos

To make it easier for newcomers to get started with an example project, we want to bundle some test data with the projects -- that way, they should work out of the box.

The sections will have to be very small to avoid a big download size. I think a 500x500m square from Vienna data would work well. That data is licensed CC-BY 4.0.

Running demo project out of the box problem

I am trying to build this on an Ubuntu 20.04 system following the instructions.

git clone https://github.com/boku-ilen/geodot-plugin.git
cd geodot-plugin/
git submodule update --init --recursive

Submodule 'godot-cpp' (https://github.com/GodotNativeTools/godot-cpp) registered for path 'godot-cpp'
Cloning into '/home/julian/extrepositories/geodot-plugin/godot-cpp'...
Submodule path 'godot-cpp': checked out 'c9a740be34438ce999402b7b76304a38daaaa811'
Submodule 'godot_headers' (https://github.com/GodotNativeTools/godot_headers) registered for path 'godot-cpp/godot_headers'
Cloning into '/home/julian/extrepositories/geodot-plugin/godot-cpp/godot_headers'...
Submodule path 'godot-cpp/godot_headers': checked out 'ddf67cc7b8274c5fb77a71c828bab2991f1ee12a'

scons platform=linux generate_bindings=yes

cons: Reading SConscript files ...
note: scons_compiledb could not be imported. To be able to use the `--compiledb=` flag, please run `pip3 install scons-compiledb`.
scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Building targets ...
g++ -o GeoRaster.os -c -std=c++17 -fPIC -I. -I/home/julian/extrepositories/geodot-plugin/src/global GeoRaster.cpp
g++ -o RasterTileExtractor.os -c -std=c++17 -fPIC -I. -I/home/julian/extrepositories/geodot-plugin/src/global RasterTileExtractor.cpp
g++ -o build/libRasterTileExtractor.so -shared GeoRaster.os RasterTileExtractor.os -lgdal
scons: done building targets.
scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Building targets ...
g++ -o Feature.os -c -std=c++17 -fPIC -I. -I/home/julian/extrepositories/geodot-plugin/src/global Feature.cpp
g++ -o LineFeature.os -c -std=c++17 -fPIC -I. -I/home/julian/extrepositories/geodot-plugin/src/global LineFeature.cpp
g++ -o PointFeature.os -c -std=c++17 -fPIC -I. -I/home/julian/extrepositories/geodot-plugin/src/global PointFeature.cpp
g++ -o PolygonFeature.os -c -std=c++17 -fPIC -I. -I/home/julian/extrepositories/geodot-plugin/src/global PolygonFeature.cpp
g++ -o VectorExtractor.os -c -std=c++17 -fPIC -I. -I/home/julian/extrepositories/geodot-plugin/src/global VectorExtractor.cpp
VectorExtractor.cpp: In static member function 'static std::__cxx11::list<LineFeature*> VectorExtractor::crop_lines_to_square(const char*, double, double, double, int)':
VectorExtractor.cpp:205:32: warning: ignoring return value of 'OGRErr OGRLayer::CreateFeature(OGRFeature*)', declared with attribute warn_unused_result [-Wunused-result]
  205 |     square_layer->CreateFeature(square_feature);
      |     ~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~
g++ -o build/libVectorExtractor.so -shared Feature.os LineFeature.os PointFeature.os PolygonFeature.os VectorExtractor.os -lgdal
scons: done building targets.
scons: done reading SConscript files.
scons: Building targets ...
g++ -o src/gdlibrary.os -c -std=c++17 -fPIC -g3 -Og -fPIC -I. -Igodot-cpp/godot_headers -Igodot-cpp/include -Igodot-cpp/include/core -Igodot-cpp/include/gen -Isrc/raster-tile-extractor -Isrc/vector-extractor -Isrc -Isrc/global src/gdlibrary.cpp
In file included from godot-cpp/include/core/Godot.hpp:12,
                 from src/geodot.h:5,
                 from src/gdlibrary.cpp:1:
godot-cpp/include/core/Ref.hpp:5:10: fatal error: Reference.hpp: No such file or directory
    5 | #include "Reference.hpp"
      |          ^~~~~~~~~~~~~~~
compilation terminated.
scons: *** [src/gdlibrary.os] Error 1
scons: building terminated because of errors.

Improve upsampling behavior

Currently, images are always sampled with the nearest-neighbor method. This results in 256x256 images with huge pixels at small scales. In most cases, this is not what we want.

We should introduce a flag with which the upsampling behavior can be set. Possibilities are:

  • Proper interpolation (e.g. for heightmaps)
  • No interpolation, generate smaller images at small scales
  • If easily doable: Color-preserving upsampling (something like EPX scaling - e.g. for land-use data)

Figure out elegant packaging of the addon on OSX

On Linux, we just copied over the libgdal.so into demo/addons/geodot/x11/ (as described in the README). On Windows, we can probably do something similar, but we need to figure out which DLLs are needed. Also we should document any other dependencies.

Same for OSX - as described by @clemens-tolboom, we might be able to use a copy of /usr/local/Cellar/gdal/3.2.1/lib/libgdal.dylib.

Required for #36.

Support vector data in any projection

At the moment, vector data has to be in webmercator for consistent coordinates. It would be ideal to convert coordinates on-the-fly (assuming the position passed to the function is always in webmercator meters) so that we're independent of the original projection of the data.

We would need to set the coordinate system / projection of the circle we construct for intersection, and to read and set it on the dataset at the given path in the VectorExtractor.

Loading from higher resolution geoimages / extracting larger-scale textures is slower

With nearest neighbor sampling, the scale of the desired image / the resolution (pixels / meter) of the raw geodata should have close to no effect on performance because only single points are sampled either way. Only the resolution of the output texture should have an effect.

For some reason though, the resolution / scale does have a pretty significant impact that is especially noticeable with very high-resolution images and large-scale (overview) extraction. It seems to stem from the warp operation. We should investigate whether additional samples or a different algorithm is used somewhere there. Perhaps #4 could come into play here too!

Reformat API with encapsulated GeoDataset and GeoLayer objects

Instead of long function calls with paths and layer names, we'd like to switch to a more object-oriented solution: Getting a GeoDataset object from Geodot, which offers functions to get its GeoLayers (e.g. all as an Array or individual ones by name). All functionality like getting points near a position, or getting all features, will then be in this GeoLayer class. We may have to strictly differentiate between raster layers and vector layers since those offer very different functionality (-> GeoRasterLayer and GeoVectorLayer).

This has several advantages: Errors are easier to convey precisely (with is_valid() checks in each object), function calls are less convoluted, and the user has a much finer control of caching since it is in their control when a GeoDataset or GeoLayer object is deleted.

This will, of course, break compatibility with previous versions.

Expose `RasterTileExtractor::reproject_to_webmercator` to Godot

The RasterTileExtractor offers a function to reproject any raster data into webmercator and save it on the disk, but it is not yet exposed to Godot. Now that RasterTileExtractor::clip does no on-the-fly reprojection for performance reasons, it would make sense to have access to reproject_to_webmercator. Thus, it can be used for an on-demand preprocessing step to get everything into the same projection.

Mac build broken

Commit a47587e broke the build.

scons
scons: Reading SConscript files ...
SConsEnvironmentError: No module named compilation_db:
  File "/Users/clemens/Downloads/godot/geodot-plugin/SConstruct", line 9:
    env = DefaultEnvironment(tools=['default', 'compilation_db'])

Changing back to the old fixes this for now.

#env = DefaultEnvironment(tools=['default', 'compilation_db'])
env = DefaultEnvironment()

README

Guess we need this requiments somehow documented

Control upsampling behavior more finely

Currently, all default GDAL resampling methods are exposed. This is good for most data, but we'd want to smooth out edges in discrete raster data such as land-use. This is currently not possible.

I believe the modal methods could work, or cubic spline with a limited color set (exactly like the image posted in the edit here: https://gis.stackexchange.com/questions/30627/smoothing-reinterpolating-raster-with-gdal/), but we need finer control over the kernel size and color sets to do this.

Destructor called too early when chaining get_database and get_layer

Sometimes it would be convenient to chain Geodot calls like this:

var layer = Geodot.get_dataset(path).get_layer(name)

But this produces an error: The resulting layer does not point to a valid OGRLayer, so the program crashes. A workaround is to do this:

var dataset = Geodot.get_dataset(path)
var layer = dataset.get_layer(name)

It seems like when chaining, some destructor is called too early. I assume the dataset gets deleted, so the layer doesn't point to anything valid anymore.

M_E warning on Mac

Not sure worth to report so feel free to close but the MacOS version has better precision.

g++ -o RasterTileExtractor.o -c -std=c++17 -fPIC -I/usr/local/Cellar/gdal/3.2.1/include -I. -I/Users/clemens/Downloads/godot/geodot-plugin/src/global RasterTileExtractor.cpp
RasterTileExtractor.cpp:15:9: warning: 'M_E' macro redefined [-Wmacro-redefined]
#define M_E 2.718281828459045
        ^
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/math.h:689:9: note: previous definition is here
#define M_E         2.71828182845904523536028747135266250   /* e              */
        ^
1 warning generated.

BUG: MacOS support libraries end up into `res://build/*`

After #33 lands we still face:

The MacOS build process results in the supporting files into res://build/ directory.

image

Fiddling removing /build makes them required in res:// aka the root of the demo project. Which is worse.

diff --git a/SConstruct b/SConstruct
index 1eeae22..9f7172a 100644
--- a/SConstruct
+++ b/SConstruct
@@ -18,11 +18,11 @@ cpp_bindings_path = "godot-cpp/"
 cpp_library = "libgodot-cpp"
 
 rte_cpp_path = "src/raster-tile-extractor/"
-rte_libpath = "src/raster-tile-extractor/build/"
+rte_libpath = "src/raster-tile-extractor/"
 rte_library = "libRasterTileExtractor"
 
 vector_cpp_path = "src/vector-extractor/"
-vector_libpath = "src/vector-extractor/build/"
+vector_libpath = "src/vector-extractor/"
 vector_library = "libVectorExtractor"
 
 demo_path = "demo/addons/geodot/"

and the other(s) too

diff --git a/src/vector-extractor/SConstruct b/src/vector-extractor/SConstruct
index bda7203..fa67298 100644
--- a/src/vector-extractor/SConstruct
+++ b/src/vector-extractor/SConstruct
@@ -25,9 +25,9 @@ if env['p'] != '':
 
-env['target_path'] = 'build/'
+env['target_path'] = './'
 env['target_name'] = 'libVectorExtractor'

We do not understand this dynamics on MacOS. Help needed.

Add caching support in multiple levels

There are three places where I think caching could be appropriate:

  • GDALDatasets in the extractors. The overhead of opening a dataset is relatively small and we'd have to check #10 first, but with many texture loads per second, there would likely be an improvement.
  • Return values of core Geodot functions like Geodot.get_image. It's plausible that these functions are called with the same arguments multiple times (e.g. to load the same heightmap for the terrain and for the collider in two different places) and this would greatly reduce the cost of consecutive calls.
  • Return values of geodata-class-to-Godot-object functions such as GeoImage.get_image_texture or GeoLine.get_curve3d. These tend to do quite a lot of work for converting the raw C++ data to a Godot class.

In some cases, we'd have to decide whether we want to return exactly the same object or a copy of the previously computed object.

Support other raster band types than Float32

The Float32 type for Geotiffs is currently hardcoded in the RasterTileExtractor, and Geodot::clip always encodes floats into a PoolByteArray.

We want to support other data types as well; at least RGBA (as a general purpose type) and single-band byte (for things like land-use images).

Add method to get pixel values in a given geoimage

For us, this is relevant for land-use data, to check whether a certain area contains a certain vegetation type, or to get a list of the most common vegetation types in that area.

We will have to make a tradeoff between accuracy and performance. I don't think iterating over all pixels is necessary for most applications, we can just take a few samples. But both options should probably be provided.

GDAL offers some of this (https://gdal.org/api/gdalrasterband_cpp.html#classGDALRasterBand), this might be worth looking into since it's probably well optimized (but probably also overkill).

won't compile on arch linux because of gdal headers location

I am trying to build the plugin on Arch Linux, I get the following include errors :

$ scons platform=linux
scons: Reading SConscript files ...
Compilation Database creation is not supported. Please consider upgrading to SCons 4.x.x!
scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Building targets ...
g++ -o GeoRaster.o -c -std=c++17 -fPIC -I. -I/home/vrichard/Projects/godot/geodot-plugin/src/global GeoRaster.cpp
GeoRaster.cpp:11:10: fatal error: gdal/cpl_error.h: No such file or directory
   11 | #include <gdal/cpl_error.h>
      |          ^~~~~~~~~~~~~~~~~~
compilation terminated.
scons: *** [GeoRaster.o] Error 1
scons: building terminated because of errors.
scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Building targets ...
g++ -o Feature.o -c -std=c++17 -fPIC -I. -I/home/vrichard/Projects/godot/geodot-plugin/src/global Feature.cpp
Feature.cpp:8:10: fatal error: gdal/ogr_feature.h: No such file or directory
    8 | #include <gdal/ogr_feature.h>
      |          ^~~~~~~~~~~~~~~~~~~~
compilation terminated.
scons: *** [Feature.o] Error 1
scons: building terminated because of errors.
scons: done reading SConscript files.
scons: Building targets ...
g++ -o src/gdlibrary.os -c -std=c++17 -fPIC -g3 -Og -fPIC -I. -Igodot-cpp/godot_headers -Igodot-cpp/include -Igodot-cpp/include/core -Igodot-cpp/include/gen -Isrc/raster-tile-extractor -Isrc/vector-extractor -Isrc -Isrc/global src/gdlibrary.cpp
In file included from src/geodot.h:10,
                 from src/gdlibrary.cpp:1:
src/vector-extractor/VectorExtractor.h:16:10: fatal error: gdal/cpl_port.h: No such file or directory
   16 | #include <gdal/cpl_port.h>
      |          ^~~~~~~~~~~~~~~~~
compilation terminated.
scons: *** [src/gdlibrary.os] Error 1
scons: building terminated because of errors.

The files on Arch are provided by the gdal packages and installed in /usr/include/ (see https://archlinux.pkgs.org/rolling/archlinux-community-x86_64/gdal-3.2.2-1-x86_64.pkg.tar.zst.html)
On other major distributions like Ubuntu or Fedora these files are located in /usr/include/gdal/* as expected (https://ubuntu.pkgs.org/21.04/ubuntu-universe-amd64/libgdal-dev_3.2.2+dfsg-1ubuntu1_amd64.deb.html)

Basically Arch Linux follows the same hierarchy than Windows and OSX, and other Linux distros chose a different path =/

Easily fixed with:
$ grep -rnI "<gdal/" src -l | xargs sed 's/<gdal\//\</g' -i

I'm fine with hacking, but is there any clean way to handle this?

Add Geodot to Godot's Asset Library

Instructions are available here: https://docs.godotengine.org/en/latest/community/asset_library/submitting_to_assetlib.html

A .gitattributes file with export-ignore attributes like in https://github.com/aaronfranke/godot-measuring-tape/blob/master/.gitattributes should be added to ignore all the source files, as they are not relevant for using the pre-built addon.

We'll probably want to restructure the demo Godot project folders so that they are in the root directory. Maybe we should move the SConstruct script and the godot-cpp link into the src folder to keep all building-related stuff in there.

To do

  • #35 in order to provide a working demo with the asset
  • #42 so that there are no other external dependencies
  • #41 because manually building for all platforms all the time would be crazy
  • #51 to provide the full Geodot functionality on Mac

Make sure godot-cpp is build same as our target

scons target=debug should build godot-cpp similar.

The instructions are not covering switching from debug to release.

Can't we add this to main SConstuct?

Manual steps

cd godot-cpp/
scons target=release
cd ..
scons target=r osgeo_path=/usr/local/Cellar/gdal/3.2.1

compling failed on windows with error LNK2019

E:\godot_repos\geodot-plugin>scons platform=windows osgeo_path=c:/OSGeo4W64 target=release
scons: Reading SConscript files ...
scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Building targets ...
scons: `.' is up to date.
scons: done building targets.
scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Building targets ...
scons: `.' is up to date.
scons: done building targets.
scons: done reading SConscript files.
scons: Building targets ...
link /nologo /dll /out:demo\addons\geodot\win64\libgeodot.dll /implib:demo\addons\geodot\win64\libgeodot.lib /LIBPATH:godot-cpp\bin /LIBPATH:src\raster-tile-extractor\build /LIBPATH:src\vector-extractor\build libgodot-cpp.windows.release.64.lib libRasterTileExtractor.lib libVectorExtractor.lib src\gdlibrary.obj src\geodata.obj src\geodot.obj src\geofeatures.obj src\geoimage.obj
  正在创建库 demo\addons\geodot\win64\libgeodot.lib 和对象 demo\addons\geodot\win64\libgeodot.exp
geodata.obj : error LNK2019: 无法解析的外部符号 GDALGetDataTypeSizeBytes,函数 "public: __int64 __cdecl GDALRasterBlock::GetBlockSize(void)const " (?GetBlockSize@GDALRasterBlock@@QEBA_JXZ) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 GDALOpenEx,函数 "public: static class GDALDataset * __cdecl GDALDataset::Open(char const *,unsigned int,char const * const *,char const * const *,char const * const *)" (?Open@GDALDataset@@SAPEAV1@PEBDIPEBQEBD11@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 GDALClose,函数 "public: void __cdecl GDALDatasetUniquePtrDeleter::operator()(class GDALDataset *)const " (??RGDALDatasetUniquePtrDeleter@@QEBAXPEAVGDALDataset@@@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 CPLStrdup,函数 "public: class CPLStringList & __cdecl CPLStringList::InsertString(int,char const *)" (?InsertString@CPLStringList@@QEAAAEAV1@HPEBD@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 CSLFindString,函数 "public: int __cdecl CPLStringList::FindString(char const *)const " (?FindString@CPLStringList@@QEBAHPEBD@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 CSLPartialFindString,函数 "public: int __cdecl CPLStringList::PartialFindString(char const *)const " (?PartialFindString@CPLStringList@@QEBAHPEBD@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: class CPLString & __cdecl CPLString::toupper(void)" (?toupper@CPLString@@QEAAAEAV1@XZ),函数 "private: class GDALDriver * __cdecl GDALDriverManager::GetDriverByName_unlocked(char const *)" (?GetDriverByName_unlocked@GDALDriverManager@@AEAAPEAVGDALDriver@@PEBD@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: int __cdecl CPLStringList::Count(void)const " (?Count@CPLStringList@@QEBAHXZ),函数 "public: bool __cdecl CPLStringList::empty(void)const " (?empty@CPLStringList@@QEBA_NXZ) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: class CPLStringList & __cdecl CPLStringList::InsertStringDirectly(int,char *)" (?InsertStringDirectly@CPLStringList@@QEAAAEAV1@HPEAD@Z),函数 "public: class CPLStringList & __cdecl CPLStringList::InsertString(int,char const *)" (?InsertString@CPLStringList@@QEAAAEAV1@HPEBD@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: char const * __cdecl CPLStringList::FetchNameValue(char const *)const " (?FetchNameValue@CPLStringList@@QEBAPEBDPEBD@Z),函数 "public: char const * __cdecl CPLStringList::operator[](char const *)const " (??ACPLStringList@@QEBAPEBDPEBD@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: class CPLStringList & __cdecl CPLStringList::Assign(char * *,int)" (?Assign@CPLStringList@@QEAAAEAV1@PEAPEADH@Z),函数 "public: class CPLStringList & __cdecl CPLStringList::operator=(char * *)" (??4CPLStringList@@QEAAAEAV0@PEAPEAD@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: char * __cdecl CPLStringList::operator[](int)" (??ACPLStringList@@QEAAPEADH@Z),函数 "public: char * __cdecl CPLStringList::operator[](unsigned __int64)" (??ACPLStringList@@QEAAPEAD_K@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: char const * __cdecl CPLStringList::operator[](int)const " (??ACPLStringList@@QEBAPEBDH@Z),函数 "public: char const * __cdecl CPLStringList::operator[](unsigned __int64)const " (??ACPLStringList@@QEBAPEBD_K@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 CPLAtomicAdd,函数 "public: int __cdecl GDALRasterBlock::AddLock(void)" (?AddLock@GDALRasterBlock@@QEAAHXZ) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: __cdecl OGRStyleMgr::OGRStyleMgr(class OGRStyleTable *)" (??0OGRStyleMgr@@QEAA@PEAVOGRStyleTable@@@Z),函数 "public: void __cdecl OGRStyleMgr::`default constructor closure'(void)" (??_FOGRStyleMgr@@QEAAXXZ) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: virtual __cdecl OGRStyleTool::~OGRStyleTool(void)" (??1OGRStyleTool@@UEAA@XZ),函数 "public: virtual void * __cdecl OGRStyleTool::`vector deleting destructor'(unsigned int)" (??_EOGRStyleTool@@UEAAPEAXI@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: char const * __cdecl OGRStylePen::GetParamStr(enum ogr_style_tool_param_pen_id,int &)" (?GetParamStr@OGRStylePen@@QEAAPEBDW4ogr_style_tool_param_pen_id@@AEAH@Z),函数 "public: char const * __cdecl OGRStylePen::Cap(int &)" (?Cap@OGRStylePen@@QEAAPEBDAEAH@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: int __cdecl OGRStylePen::GetParamNum(enum ogr_style_tool_param_pen_id,int &)" (?GetParamNum@OGRStylePen@@QEAAHW4ogr_style_tool_param_pen_id@@AEAH@Z),函数 "public: int __cdecl OGRStylePen::Priority(int &)" (?Priority@OGRStylePen@@QEAAHAEAH@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: double __cdecl OGRStylePen::GetParamDbl(enum ogr_style_tool_param_pen_id,int &)" (?GetParamDbl@OGRStylePen@@QEAANW4ogr_style_tool_param_pen_id@@AEAH@Z),函数 "public: double __cdecl OGRStylePen::PerpendicularOffset(int &)" (?PerpendicularOffset@OGRStylePen@@QEAANAEAH@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: void __cdecl OGRStylePen::SetParamStr(enum ogr_style_tool_param_pen_id,char const *)" (?SetParamStr@OGRStylePen@@QEAAXW4ogr_style_tool_param_pen_id@@PEBD@Z),函数 "public: void __cdecl OGRStylePen::SetCap(char const *)" (?SetCap@OGRStylePen@@QEAAXPEBD@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: void __cdecl OGRStylePen::SetParamNum(enum ogr_style_tool_param_pen_id,int)" (?SetParamNum@OGRStylePen@@QEAAXW4ogr_style_tool_param_pen_id@@H@Z),函数 "public: void __cdecl OGRStylePen::SetPriority(int)" (?SetPriority@OGRStylePen@@QEAAXH@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: void __cdecl OGRStylePen::SetParamDbl(enum ogr_style_tool_param_pen_id,double)" (?SetParamDbl@OGRStylePen@@QEAAXW4ogr_style_tool_param_pen_id@@N@Z),函数 "public: void __cdecl OGRStylePen::SetPerpendicularOffset(double)" (?SetPerpendicularOffset@OGRStylePen@@QEAAXN@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: char const * __cdecl OGRStyleBrush::GetParamStr(enum ogr_style_tool_param_brush_id,int &)" (?GetParamStr@OGRStyleBrush@@QEAAPEBDW4ogr_style_tool_param_brush_id@@AEAH@Z),函数 "public: char const * __cdecl OGRStyleBrush::BackColor(int &)" (?BackColor@OGRStyleBrush@@QEAAPEBDAEAH@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: int __cdecl OGRStyleBrush::GetParamNum(enum ogr_style_tool_param_brush_id,int &)" (?GetParamNum@OGRStyleBrush@@QEAAHW4ogr_style_tool_param_brush_id@@AEAH@Z),函数 "public: int __cdecl OGRStyleBrush::Priority(int &)" (?Priority@OGRStyleBrush@@QEAAHAEAH@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: double __cdecl OGRStyleBrush::GetParamDbl(enum ogr_style_tool_param_brush_id,int &)" (?GetParamDbl@OGRStyleBrush@@QEAANW4ogr_style_tool_param_brush_id@@AEAH@Z),函数 "public: double __cdecl OGRStyleBrush::Angle(int &)" (?Angle@OGRStyleBrush@@QEAANAEAH@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: void __cdecl OGRStyleBrush::SetParamStr(enum ogr_style_tool_param_brush_id,char const *)" (?SetParamStr@OGRStyleBrush@@QEAAXW4ogr_style_tool_param_brush_id@@PEBD@Z),函数 "public: void __cdecl OGRStyleBrush::SetBackColor(char const *)" (?SetBackColor@OGRStyleBrush@@QEAAXPEBD@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: void __cdecl OGRStyleBrush::SetParamNum(enum ogr_style_tool_param_brush_id,int)" (?SetParamNum@OGRStyleBrush@@QEAAXW4ogr_style_tool_param_brush_id@@H@Z),函数 "public: void __cdecl OGRStyleBrush::SetPriority(int)" (?SetPriority@OGRStyleBrush@@QEAAXH@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: void __cdecl OGRStyleBrush::SetParamDbl(enum ogr_style_tool_param_brush_id,double)" (?SetParamDbl@OGRStyleBrush@@QEAAXW4ogr_style_tool_param_brush_id@@N@Z),函数 "public: void __cdecl OGRStyleBrush::SetAngle(double)" (?SetAngle@OGRStyleBrush@@QEAAXN@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: char const * __cdecl OGRStyleSymbol::GetParamStr(enum ogr_style_tool_param_symbol_id,int &)" (?GetParamStr@OGRStyleSymbol@@QEAAPEBDW4ogr_style_tool_param_symbol_id@@AEAH@Z),函数 "public: char const * __cdecl OGRStyleSymbol::Color(int &)" (?Color@OGRStyleSymbol@@QEAAPEBDAEAH@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: int __cdecl OGRStyleSymbol::GetParamNum(enum ogr_style_tool_param_symbol_id,int &)" (?GetParamNum@OGRStyleSymbol@@QEAAHW4ogr_style_tool_param_symbol_id@@AEAH@Z),函数 "public: int __cdecl OGRStyleSymbol::Priority(int &)" (?Priority@OGRStyleSymbol@@QEAAHAEAH@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: double __cdecl OGRStyleSymbol::GetParamDbl(enum ogr_style_tool_param_symbol_id,int &)" (?GetParamDbl@OGRStyleSymbol@@QEAANW4ogr_style_tool_param_symbol_id@@AEAH@Z),函数 "public: double __cdecl OGRStyleSymbol::Angle(int &)" (?Angle@OGRStyleSymbol@@QEAANAEAH@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: void __cdecl OGRStyleSymbol::SetParamStr(enum ogr_style_tool_param_symbol_id,char const *)" (?SetParamStr@OGRStyleSymbol@@QEAAXW4ogr_style_tool_param_symbol_id@@PEBD@Z),函数 "public: void __cdecl OGRStyleSymbol::SetColor(char const *)" (?SetColor@OGRStyleSymbol@@QEAAXPEBD@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: void __cdecl OGRStyleSymbol::SetParamNum(enum ogr_style_tool_param_symbol_id,int)" (?SetParamNum@OGRStyleSymbol@@QEAAXW4ogr_style_tool_param_symbol_id@@H@Z),函数 "public: void __cdecl OGRStyleSymbol::SetPriority(int)" (?SetPriority@OGRStyleSymbol@@QEAAXH@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: void __cdecl OGRStyleSymbol::SetParamDbl(enum ogr_style_tool_param_symbol_id,double)" (?SetParamDbl@OGRStyleSymbol@@QEAAXW4ogr_style_tool_param_symbol_id@@N@Z),函数 "public: void __cdecl OGRStyleSymbol::SetAngle(double)" (?SetAngle@OGRStyleSymbol@@QEAAXN@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: char const * __cdecl OGRStyleLabel::GetParamStr(enum ogr_style_tool_param_label_id,int &)" (?GetParamStr@OGRStyleLabel@@QEAAPEBDW4ogr_style_tool_param_label_id@@AEAH@Z),函数 "public: char const * __cdecl OGRStyleLabel::BackColor(int &)" (?BackColor@OGRStyleLabel@@QEAAPEBDAEAH@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: int __cdecl OGRStyleLabel::GetParamNum(enum ogr_style_tool_param_label_id,int &)" (?GetParamNum@OGRStyleLabel@@QEAAHW4ogr_style_tool_param_label_id@@AEAH@Z),函数 "public: int __cdecl OGRStyleLabel::Anchor(int &)" (?Anchor@OGRStyleLabel@@QEAAHAEAH@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: double __cdecl OGRStyleLabel::GetParamDbl(enum ogr_style_tool_param_label_id,int &)" (?GetParamDbl@OGRStyleLabel@@QEAANW4ogr_style_tool_param_label_id@@AEAH@Z),函数 "public: double __cdecl OGRStyleLabel::Angle(int &)" (?Angle@OGRStyleLabel@@QEAANAEAH@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: void __cdecl OGRStyleLabel::SetParamStr(enum ogr_style_tool_param_label_id,char const *)" (?SetParamStr@OGRStyleLabel@@QEAAXW4ogr_style_tool_param_label_id@@PEBD@Z),函数 "public: void __cdecl OGRStyleLabel::SetBackColor(char const *)" (?SetBackColor@OGRStyleLabel@@QEAAXPEBD@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: void __cdecl OGRStyleLabel::SetParamNum(enum ogr_style_tool_param_label_id,int)" (?SetParamNum@OGRStyleLabel@@QEAAXW4ogr_style_tool_param_label_id@@H@Z),函数 "public: void __cdecl OGRStyleLabel::SetAnchor(int)" (?SetAnchor@OGRStyleLabel@@QEAAXH@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: void __cdecl OGRStyleLabel::SetParamDbl(enum ogr_style_tool_param_label_id,double)" (?SetParamDbl@OGRStyleLabel@@QEAAXW4ogr_style_tool_param_label_id@@N@Z),函数 "public: void __cdecl OGRStyleLabel::SetAngle(double)" (?SetAngle@OGRStyleLabel@@QEAAXN@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: __cdecl CPLJSONObject::~CPLJSONObject(void)" (??1CPLJSONObject@@QEAA@XZ),函数 "public: __cdecl CPLJSONArray::~CPLJSONArray(void)" (??1CPLJSONArray@@QEAA@XZ) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: __cdecl CPLJSONObject::CPLJSONObject(class CPLJSONObject const &)" (??0CPLJSONObject@@QEAA@AEBV0@@Z),函数 "public: __cdecl CPLJSONArray::CPLJSONArray(class CPLJSONArray &&)" (??0CPLJSONArray@@QEAA@$$QEAV0@@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: class CPLJSONObject & __cdecl CPLJSONObject::operator=(class CPLJSONObject const &)" (??4CPLJSONObject@@QEAAAEAV0@AEBV0@@Z),函数 "public: class CPLJSONArray & __cdecl CPLJSONArray::operator=(class CPLJSONArray &&)" (??4CPLJSONArray@@QEAAAEAV0@$$QEAV0@@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: __cdecl OGR_SRSNode::OGR_SRSNode(char const *)" (??0OGR_SRSNode@@QEAA@PEBD@Z),函数 "public: void __cdecl OGR_SRSNode::`default constructor closure'(void)" (??_FOGR_SRSNode@@QEAAXXZ) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: __cdecl OGRSpatialReference::OGRSpatialReference(char const *)" (??0OGRSpatialReference@@QEAA@PEBD@Z),函数 "public: void __cdecl OGRSpatialReference::`default constructor closure'(void)" (??_FOGRSpatialReference@@QEAAXXZ) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: double __cdecl OGRSpatialReference::GetLinearUnits(char const * *)const " (?GetLinearUnits@OGRSpatialReference@@QEBANPEAPEBD@Z),函数 "public: double __cdecl OGRSpatialReference::GetLinearUnits(std::nullptr_t)const " (?GetLinearUnits@OGRSpatialReference@@QEBAN$$T@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: double __cdecl OGRSpatialReference::GetTargetLinearUnits(char const *,char const * *)const " (?GetTargetLinearUnits@OGRSpatialReference@@QEBANPEBDPEAPEBD@Z),函数 "public: double __cdecl OGRSpatialReference::GetTargetLinearUnits(char const *,std::nullptr_t)const " (?GetTargetLinearUnits@OGRSpatialReference@@QEBANPEBD$$T@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: double __cdecl OGRSpatialReference::GetAngularUnits(char const * *)const " (?GetAngularUnits@OGRSpatialReference@@QEBANPEAPEBD@Z),函数 "public: double __cdecl OGRSpatialReference::GetAngularUnits(std::nullptr_t)const " (?GetAngularUnits@OGRSpatialReference@@QEBAN$$T@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: double __cdecl OGRSpatialReference::GetPrimeMeridian(char const * *)const " (?GetPrimeMeridian@OGRSpatialReference@@QEBANPEAPEBD@Z),函数 "public: double __cdecl OGRSpatialReference::GetPrimeMeridian(std::nullptr_t)const " (?GetPrimeMeridian@OGRSpatialReference@@QEBAN$$T@Z) 中引用了该符号
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual void __cdecl OGRDefaultGeometryVisitor::visit(class OGRLineString *)" (?visit@OGRDefaultGeometryVisitor@@UEAAXPEAVOGRLineString@@@Z)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual void __cdecl OGRDefaultGeometryVisitor::visit(class OGRLinearRing *)" (?visit@OGRDefaultGeometryVisitor@@UEAAXPEAVOGRLinearRing@@@Z)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual void __cdecl OGRDefaultGeometryVisitor::visit(class OGRPolygon *)" (?visit@OGRDefaultGeometryVisitor@@UEAAXPEAVOGRPolygon@@@Z)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual void __cdecl OGRDefaultGeometryVisitor::visit(class OGRMultiPoint *)" (?visit@OGRDefaultGeometryVisitor@@UEAAXPEAVOGRMultiPoint@@@Z)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual void __cdecl OGRDefaultGeometryVisitor::visit(class OGRMultiLineString *)" (?visit@OGRDefaultGeometryVisitor@@UEAAXPEAVOGRMultiLineString@@@Z)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual void __cdecl OGRDefaultGeometryVisitor::visit(class OGRMultiPolygon *)" (?visit@OGRDefaultGeometryVisitor@@UEAAXPEAVOGRMultiPolygon@@@Z)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual void __cdecl OGRDefaultGeometryVisitor::visit(class OGRGeometryCollection *)" (?visit@OGRDefaultGeometryVisitor@@UEAAXPEAVOGRGeometryCollection@@@Z)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual void __cdecl OGRDefaultGeometryVisitor::visit(class OGRCircularString *)" (?visit@OGRDefaultGeometryVisitor@@UEAAXPEAVOGRCircularString@@@Z)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual void __cdecl OGRDefaultGeometryVisitor::visit(class OGRCompoundCurve *)" (?visit@OGRDefaultGeometryVisitor@@UEAAXPEAVOGRCompoundCurve@@@Z)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual void __cdecl OGRDefaultGeometryVisitor::visit(class OGRCurvePolygon *)" (?visit@OGRDefaultGeometryVisitor@@UEAAXPEAVOGRCurvePolygon@@@Z)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual void __cdecl OGRDefaultGeometryVisitor::visit(class OGRMultiCurve *)" (?visit@OGRDefaultGeometryVisitor@@UEAAXPEAVOGRMultiCurve@@@Z)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual void __cdecl OGRDefaultGeometryVisitor::visit(class OGRMultiSurface *)" (?visit@OGRDefaultGeometryVisitor@@UEAAXPEAVOGRMultiSurface@@@Z)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual void __cdecl OGRDefaultGeometryVisitor::visit(class OGRTriangle *)" (?visit@OGRDefaultGeometryVisitor@@UEAAXPEAVOGRTriangle@@@Z)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual void __cdecl OGRDefaultGeometryVisitor::visit(class OGRPolyhedralSurface *)" (?visit@OGRDefaultGeometryVisitor@@UEAAXPEAVOGRPolyhedralSurface@@@Z)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual void __cdecl OGRDefaultGeometryVisitor::visit(class OGRTriangulatedSurface *)" (?visit@OGRDefaultGeometryVisitor@@UEAAXPEAVOGRTriangulatedSurface@@@Z)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual void __cdecl OGRDefaultConstGeometryVisitor::visit(class OGRLineString const *)" (?visit@OGRDefaultConstGeometryVisitor@@UEAAXPEBVOGRLineString@@@Z)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual void __cdecl OGRDefaultConstGeometryVisitor::visit(class OGRLinearRing const *)" (?visit@OGRDefaultConstGeometryVisitor@@UEAAXPEBVOGRLinearRing@@@Z)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual void __cdecl OGRDefaultConstGeometryVisitor::visit(class OGRPolygon const *)" (?visit@OGRDefaultConstGeometryVisitor@@UEAAXPEBVOGRPolygon@@@Z)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual void __cdecl OGRDefaultConstGeometryVisitor::visit(class OGRMultiPoint const *)" (?visit@OGRDefaultConstGeometryVisitor@@UEAAXPEBVOGRMultiPoint@@@Z)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual void __cdecl OGRDefaultConstGeometryVisitor::visit(class OGRMultiLineString const *)" (?visit@OGRDefaultConstGeometryVisitor@@UEAAXPEBVOGRMultiLineString@@@Z)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual void __cdecl OGRDefaultConstGeometryVisitor::visit(class OGRMultiPolygon const *)" (?visit@OGRDefaultConstGeometryVisitor@@UEAAXPEBVOGRMultiPolygon@@@Z)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual void __cdecl OGRDefaultConstGeometryVisitor::visit(class OGRGeometryCollection const *)" (?visit@OGRDefaultConstGeometryVisitor@@UEAAXPEBVOGRGeometryCollection@@@Z)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual void __cdecl OGRDefaultConstGeometryVisitor::visit(class OGRCircularString const *)" (?visit@OGRDefaultConstGeometryVisitor@@UEAAXPEBVOGRCircularString@@@Z)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual void __cdecl OGRDefaultConstGeometryVisitor::visit(class OGRCompoundCurve const *)" (?visit@OGRDefaultConstGeometryVisitor@@UEAAXPEBVOGRCompoundCurve@@@Z)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual void __cdecl OGRDefaultConstGeometryVisitor::visit(class OGRCurvePolygon const *)" (?visit@OGRDefaultConstGeometryVisitor@@UEAAXPEBVOGRCurvePolygon@@@Z)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual void __cdecl OGRDefaultConstGeometryVisitor::visit(class OGRMultiCurve const *)" (?visit@OGRDefaultConstGeometryVisitor@@UEAAXPEBVOGRMultiCurve@@@Z)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual void __cdecl OGRDefaultConstGeometryVisitor::visit(class OGRMultiSurface const *)" (?visit@OGRDefaultConstGeometryVisitor@@UEAAXPEBVOGRMultiSurface@@@Z)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual void __cdecl OGRDefaultConstGeometryVisitor::visit(class OGRTriangle const *)" (?visit@OGRDefaultConstGeometryVisitor@@UEAAXPEBVOGRTriangle@@@Z)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual void __cdecl OGRDefaultConstGeometryVisitor::visit(class OGRPolyhedralSurface const *)" (?visit@OGRDefaultConstGeometryVisitor@@UEAAXPEBVOGRPolyhedralSurface@@@Z)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual void __cdecl OGRDefaultConstGeometryVisitor::visit(class OGRTriangulatedSurface const *)" (?visit@OGRDefaultConstGeometryVisitor@@UEAAXPEBVOGRTriangulatedSurface@@@Z)
geodata.obj : error LNK2019: 无法解析的外部符号 "protected: int __cdecl OGRGeometry::PointOnSurfaceInternal(class OGRPoint *)const " (?PointOnSurfaceInternal@OGRGeometry@@IEBAHPEAVOGRPoint@@@Z),函数 "public: virtual int __cdecl OGRSurface::PointOnSurface(class OGRPoint *)const " (?PointOnSurface@OGRSurface@@UEBAHPEAVOGRPoint@@@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: __cdecl OGRGeometry::OGRGeometry(void)" (??0OGRGeometry@@QEAA@XZ),函数 "public: __cdecl OGRSurface::OGRSurface(void)" (??0OGRSurface@@QEAA@XZ) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: __cdecl OGRGeometry::OGRGeometry(class OGRGeometry const &)" (??0OGRGeometry@@QEAA@AEBV0@@Z),函数 "public: __cdecl OGRSurface::OGRSurface(class OGRSurface &&)" (??0OGRSurface@@QEAA@$$QEAV0@@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: virtual __cdecl OGRGeometry::~OGRGeometry(void)" (??1OGRGeometry@@UEAA@XZ),函数 "public: virtual __cdecl OGRSurface::~OGRSurface(void)" (??1OGRSurface@@UEAA@XZ) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: class OGRGeometry & __cdecl OGRGeometry::operator=(class OGRGeometry const &)" (??4OGRGeometry@@QEAAAEAV0@AEBV0@@Z),函数 "public: class OGRSurface & __cdecl OGRSurface::operator=(class OGRSurface &&)" (??4OGRSurface@@QEAAAEAV0@$$QEAV0@@Z) 中引用了该符号
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual int __cdecl OGRGeometry::getCoordinateDimension(void)const " (?getCoordinateDimension@OGRGeometry@@UEBAHXZ)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual int __cdecl OGRGeometry::IsValid(void)const " (?IsValid@OGRGeometry@@UEBAHXZ)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual class OGRGeometry * __cdecl OGRGeometry::MakeValid(void)const " (?MakeValid@OGRGeometry@@UEBAPEAV1@XZ)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual int __cdecl OGRGeometry::IsSimple(void)const " (?IsSimple@OGRGeometry@@UEBAHXZ)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual int __cdecl OGRGeometry::IsRing(void)const " (?IsRing@OGRGeometry@@UEBAHXZ)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual void __cdecl OGRGeometry::dumpReadable(struct _iobuf *,char const *,char * *)const " (?dumpReadable@OGRGeometry@@UEBAXPEAU_iobuf@@PEBDPEAPEAD@Z)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual char * __cdecl OGRGeometry::exportToGML(char const * const *)const " (?exportToGML@OGRGeometry@@UEBAPEADPEBQEBD@Z)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual char * __cdecl OGRGeometry::exportToKML(void)const " (?exportToKML@OGRGeometry@@UEBAPEADXZ)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual char * __cdecl OGRGeometry::exportToJson(void)const " (?exportToJson@OGRGeometry@@UEBAPEADXZ)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual struct GEOSGeom_t * __cdecl OGRGeometry::exportToGEOS(struct GEOSContextHandle_HS *)const " (?exportToGEOS@OGRGeometry@@UEBAPEAUGEOSGeom_t@@PEAUGEOSContextHandle_HS@@@Z)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual int __cdecl OGRGeometry::hasCurveGeometry(int)const " (?hasCurveGeometry@OGRGeometry@@UEBAHH@Z)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual class OGRGeometry * __cdecl OGRGeometry::getCurveGeometry(char const * const *)const " (?getCurveGeometry@OGRGeometry@@UEBAPEAV1@PEBQEBD@Z)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual class OGRGeometry * __cdecl OGRGeometry::getLinearGeometry(double,char const * const *)const " (?getLinearGeometry@OGRGeometry@@UEBAPEAV1@NPEBQEBD@Z)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual void __cdecl OGRGeometry::closeRings(void)" (?closeRings@OGRGeometry@@UEAAXXZ)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual void __cdecl OGRGeometry::setCoordinateDimension(int)" (?setCoordinateDimension@OGRGeometry@@UEAAXH@Z)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual void __cdecl OGRGeometry::set3D(int)" (?set3D@OGRGeometry@@UEAAXH@Z)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual void __cdecl OGRGeometry::setMeasured(int)" (?setMeasured@OGRGeometry@@UEAAXH@Z)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual void __cdecl OGRGeometry::assignSpatialReference(class OGRSpatialReference *)" (?assignSpatialReference@OGRGeometry@@UEAAXPEAVOGRSpatialReference@@@Z)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual void __cdecl OGRGeometry::segmentize(double)" (?segmentize@OGRGeometry@@UEAAXN@Z)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual int __cdecl OGRGeometry::Intersects(class OGRGeometry const *)const " (?Intersects@OGRGeometry@@UEBAHPEBV1@@Z)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual int __cdecl OGRGeometry::Disjoint(class OGRGeometry const *)const " (?Disjoint@OGRGeometry@@UEBAHPEBV1@@Z)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual int __cdecl OGRGeometry::Touches(class OGRGeometry const *)const " (?Touches@OGRGeometry@@UEBAHPEBV1@@Z)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual int __cdecl OGRGeometry::Crosses(class OGRGeometry const *)const " (?Crosses@OGRGeometry@@UEBAHPEBV1@@Z)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual int __cdecl OGRGeometry::Within(class OGRGeometry const *)const " (?Within@OGRGeometry@@UEBAHPEBV1@@Z)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual int __cdecl OGRGeometry::Contains(class OGRGeometry const *)const " (?Contains@OGRGeometry@@UEBAHPEBV1@@Z)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual int __cdecl OGRGeometry::Overlaps(class OGRGeometry const *)const " (?Overlaps@OGRGeometry@@UEBAHPEBV1@@Z)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual class OGRGeometry * __cdecl OGRGeometry::Boundary(void)const " (?Boundary@OGRGeometry@@UEBAPEAV1@XZ)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual double __cdecl OGRGeometry::Distance(class OGRGeometry const *)const " (?Distance@OGRGeometry@@UEBANPEBV1@@Z)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual class OGRGeometry * __cdecl OGRGeometry::ConvexHull(void)const " (?ConvexHull@OGRGeometry@@UEBAPEAV1@XZ)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual class OGRGeometry * __cdecl OGRGeometry::Buffer(double,int)const " (?Buffer@OGRGeometry@@UEBAPEAV1@NH@Z)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual class OGRGeometry * __cdecl OGRGeometry::Intersection(class OGRGeometry const *)const " (?Intersection@OGRGeometry@@UEBAPEAV1@PEBV1@@Z)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual class OGRGeometry * __cdecl OGRGeometry::Union(class OGRGeometry const *)const " (?Union@OGRGeometry@@UEBAPEAV1@PEBV1@@Z)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual class OGRGeometry * __cdecl OGRGeometry::UnionCascaded(void)const " (?UnionCascaded@OGRGeometry@@UEBAPEAV1@XZ)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual class OGRGeometry * __cdecl OGRGeometry::Difference(class OGRGeometry const *)const " (?Difference@OGRGeometry@@UEBAPEAV1@PEBV1@@Z)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual class OGRGeometry * __cdecl OGRGeometry::SymDifference(class OGRGeometry const *)const " (?SymDifference@OGRGeometry@@UEBAPEAV1@PEBV1@@Z)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual int __cdecl OGRGeometry::Centroid(class OGRPoint *)const " (?Centroid@OGRGeometry@@UEBAHPEAVOGRPoint@@@Z)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual class OGRGeometry * __cdecl OGRGeometry::Simplify(double)const " (?Simplify@OGRGeometry@@UEBAPEAV1@N@Z)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual class OGRGeometry * __cdecl OGRGeometry::DelaunayTriangulation(double,int)const " (?DelaunayTriangulation@OGRGeometry@@UEBAPEAV1@NH@Z)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual class OGRGeometry * __cdecl OGRGeometry::Polygonize(void)const " (?Polygonize@OGRGeometry@@UEBAPEAV1@XZ)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual double __cdecl OGRGeometry::Distance3D(class OGRGeometry const *)const " (?Distance3D@OGRGeometry@@UEBANPEBV1@@Z)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual void __cdecl OGRGeometry::swapXY(void)" (?swapXY@OGRGeometry@@UEAAXXZ)
geodata.obj : error LNK2019: 无法解析的外部符号 "public: virtual __cdecl OGRPointIterator::~OGRPointIterator(void)" (??1OGRPointIterator@@UEAA@XZ),函数 "public: virtual void * __cdecl OGRPointIterator::`vector deleting destructor'(unsigned int)" (??_EOGRPointIterator@@UEAAPEAXI@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: static int __cdecl OGRGeometryFactory::createFromWkt(char const * *,class OGRSpatialReference *,class OGRGeometry * *)" (?createFromWkt@OGRGeometryFactory@@SAHPEAPEBDPEAVOGRSpatialReference@@PEAPEAVOGRGeometry@@@Z),函数 "public: static int __cdecl OGRGeometryFactory::createFromWkt(char * *,class OGRSpatialReference *,class OGRGeometry * *)" (?createFromWkt@OGRGeometryFactory@@SAHPEAPEADPEAVOGRSpatialReference@@PEAPEAVOGRGeometry@@@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: __cdecl OGRFeatureDefn::OGRFeatureDefn(char const *)" (??0OGRFeatureDefn@@QEAA@PEBD@Z),函数 "public: void __cdecl OGRFeatureDefn::`default constructor closure'(void)" (??_FOGRFeatureDefn@@QEAAXXZ) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: void __cdecl OGRFeature::FieldValue::clear(void)" (?clear@FieldValue@OGRFeature@@QEAAXXZ),函数 "public: void __cdecl OGRFeature::FieldValue::Unset(void)" (?Unset@FieldValue@OGRFeature@@QEAAXXZ) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: class OGRFieldDefn const * __cdecl OGRFeature::FieldValue::GetDefn(void)const " (?GetDefn@FieldValue@OGRFeature@@QEBAPEBVOGRFieldDefn@@XZ),函数 "public: char const * __cdecl OGRFeature::FieldValue::GetName(void)const " (?GetName@FieldValue@OGRFeature@@QEBAPEBDXZ) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: bool __cdecl OGRFeature::FieldValue::IsUnset(void)const " (?IsUnset@FieldValue@OGRFeature@@QEBA_NXZ),函数 "public: bool __cdecl OGRFeature::FieldValue::empty(void)const " (?empty@FieldValue@OGRFeature@@QEBA_NXZ) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: union OGRField const * __cdecl OGRFeature::FieldValue::GetRawValue(void)const " (?GetRawValue@FieldValue@OGRFeature@@QEBAPEBTOGRField@@XZ),函数 "public: double __cdecl OGRFeature::FieldValue::GetDouble(void)const " (?GetDouble@FieldValue@OGRFeature@@QEBANXZ) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: int __cdecl OGRFeature::FieldValue::GetAsInteger(void)const " (?GetAsInteger@FieldValue@OGRFeature@@QEBAHXZ) ,函数 "public: __cdecl OGRFeature::FieldValue::operator int(void)const " (??BFieldValue@OGRFeature@@QEBAHXZ) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: __int64 __cdecl OGRFeature::FieldValue::GetAsInteger64(void)const " (?GetAsInteger64@FieldValue@OGRFeature@@QEBA_JXZ),函数 "public: __cdecl OGRFeature::FieldValue::operator __int64(void)const " (??BFieldValue@OGRFeature@@QEBA_JXZ) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: double __cdecl OGRFeature::FieldValue::GetAsDouble(void)const " (?GetAsDouble@FieldValue@OGRFeature@@QEBANXZ),函数 "public: __cdecl OGRFeature::FieldValue::operator double(void)const " (??BFieldValue@OGRFeature@@QEBANXZ) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: char const * __cdecl OGRFeature::FieldValue::GetAsString(void)const " (?GetAsString@FieldValue@OGRFeature@@QEBAPEBDXZ),函数 "public: __cdecl OGRFeature::FieldValue::operator char const *(void)const " (??BFieldValue@OGRFeature@@QEBAPEBDXZ) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: class std::vector<int,class std::allocator<int> > const & __cdecl OGRFeature::FieldValue::GetAsIntegerList(void)const " (?GetAsIntegerList@FieldValue@OGRFeature@@QEBAAEBV?$vector@HV?$allocator@H@std@@@std@@XZ),函数 "public: __cdecl OGRFeature::FieldValue::operator class std::vector<int,class std::allocator<int> > const &(void)const " (??BFieldValue@OGRFeature@@QEBAAEBV?$vector@HV?$allocator@H@std@@@std@@XZ) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: class std::vector<__int64,class std::allocator<__int64> > const & __cdecl OGRFeature::FieldValue::GetAsInteger64List(void)const " (?GetAsInteger64List@FieldValue@OGRFeature@@QEBAAEBV?$vector@_JV?$allocator@_J@std@@@std@@XZ),函数 "public: __cdecl OGRFeature::FieldValue::operator class std::vector<__int64,class std::allocator<__int64> > const &(void)const " (??BFieldValue@OGRFeature@@QEBAAEBV?$vector@_JV?$allocator@_J@std@@@std@@XZ) 中引 用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: class std::vector<double,class std::allocator<double> > const & __cdecl OGRFeature::FieldValue::GetAsDoubleList(void)const " (?GetAsDoubleList@FieldValue@OGRFeature@@QEBAAEBV?$vector@NV?$allocator@N@std@@@std@@XZ),函数 "public: __cdecl OGRFeature::FieldValue::operator class std::vector<double,class std::allocator<double> > const &(void)const " (??BFieldValue@OGRFeature@@QEBAAEBV?$vector@NV?$allocator@N@std@@@std@@XZ) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: class std::vector<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::allocator<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > > const & __cdecl OGRFeature::FieldValue::GetAsStringList(void)const " (?GetAsStringList@FieldValue@OGRFeature@@QEBAAEBV?$vector@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V?$allocator@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@@std@@XZ),函数 "public: __cdecl OGRFeature::FieldValue::operator class std::vector<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::allocator<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > > const &(void)const " (??BFieldValue@OGRFeature@@QEBAAEBV?$vector@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V?$allocator@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@@std@@XZ) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: int __cdecl OGRFeature::GetFieldAsInteger(int)const " (?GetFieldAsInteger@OGRFeature@@QEBAHH@Z),函数 "public: int __cdecl OGRFeature::GetFieldAsInteger(char const *)const " (?GetFieldAsInteger@OGRFeature@@QEBAHPEBD@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: __int64 __cdecl OGRFeature::GetFieldAsInteger64(int)const " (?GetFieldAsInteger64@OGRFeature@@QEBA_JH@Z),函 数 "public: __int64 __cdecl OGRFeature::GetFieldAsInteger64(char const *)const " (?GetFieldAsInteger64@OGRFeature@@QEBA_JPEBD@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: double __cdecl OGRFeature::GetFieldAsDouble(int)const " (?GetFieldAsDouble@OGRFeature@@QEBANH@Z),函数 "public: double __cdecl OGRFeature::GetFieldAsDouble(char const *)const " (?GetFieldAsDouble@OGRFeature@@QEBANPEBD@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: char const * __cdecl OGRFeature::GetFieldAsString(int)const " (?GetFieldAsString@OGRFeature@@QEBAPEBDH@Z),函数 "public: char const * __cdecl OGRFeature::GetFieldAsString(char const *)const " (?GetFieldAsString@OGRFeature@@QEBAPEBDPEBD@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: int const * __cdecl OGRFeature::GetFieldAsIntegerList(int,int *)const " (?GetFieldAsIntegerList@OGRFeature@@QEBAPEBHHPEAH@Z),函数 "public: int const * __cdecl OGRFeature::GetFieldAsIntegerList(char const *,int *)const " (?GetFieldAsIntegerList@OGRFeature@@QEBAPEBHPEBDPEAH@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: __int64 const * __cdecl OGRFeature::GetFieldAsInteger64List(int,int *)const " (?GetFieldAsInteger64List@OGRFeature@@QEBAPEB_JHPEAH@Z),函数 "public: __int64 const * __cdecl OGRFeature::GetFieldAsInteger64List(char const *,int *)const " (?GetFieldAsInteger64List@OGRFeature@@QEBAPEB_JPEBDPEAH@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: double const * __cdecl OGRFeature::GetFieldAsDoubleList(int,int *)const " (?GetFieldAsDoubleList@OGRFeature@@QEBAPEBNHPEAH@Z),函数 "public: double const * __cdecl OGRFeature::GetFieldAsDoubleList(char const *,int *)const " (?GetFieldAsDoubleList@OGRFeature@@QEBAPEBNPEBDPEAH@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: char * * __cdecl OGRFeature::GetFieldAsStringList(int)const " (?GetFieldAsStringList@OGRFeature@@QEBAPEAPEADH@Z),函数 "public: char * * __cdecl OGRFeature::GetFieldAsStringList(char const *)const " (?GetFieldAsStringList@OGRFeature@@QEBAPEAPEADPEBD@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: void __cdecl OGRFeature::SetField(int,int)" (?SetField@OGRFeature@@QEAAXHH@Z),函数 "public: void __cdecl OGRFeature::SetField(char const *,int)" (?SetField@OGRFeature@@QEAAXPEBDH@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: void __cdecl OGRFeature::SetField(int,__int64)" (?SetField@OGRFeature@@QEAAXH_J@Z),函数 "public: void __cdecl OGRFeature::SetField(char const *,__int64)" (?SetField@OGRFeature@@QEAAXPEBD_J@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: void __cdecl OGRFeature::SetField(int,double)" (?SetField@OGRFeature@@QEAAXHN@Z),函数 "public: void __cdecl OGRFeature::SetField(char const *,double)" (?SetField@OGRFeature@@QEAAXPEBDN@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: void __cdecl OGRFeature::SetField(int,char const *)" (?SetField@OGRFeature@@QEAAXHPEBD@Z),函数 "public: void __cdecl OGRFeature::SetField(char const *,char const *)" (?SetField@OGRFeature@@QEAAXPEBD0@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: void __cdecl OGRFeature::SetField(int,int,int const *)" (?SetField@OGRFeature@@QEAAXHHPEBH@Z),函数 "public: void __cdecl OGRFeature::SetField(char const *,int,int const *)" (?SetField@OGRFeature@@QEAAXPEBDHPEBH@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: void __cdecl OGRFeature::SetField(int,int,__int64 const *)" (?SetField@OGRFeature@@QEAAXHHPEB_J@Z),函数 "public: void __cdecl OGRFeature::SetField(char const *,int,__int64 const *)" (?SetField@OGRFeature@@QEAAXPEBDHPEB_J@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: void __cdecl OGRFeature::SetField(int,int,double const *)" (?SetField@OGRFeature@@QEAAXHHPEBN@Z),函数 "public: void __cdecl OGRFeature::SetField(char const *,int,double const *)" (?SetField@OGRFeature@@QEAAXPEBDHPEBN@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: void __cdecl OGRFeature::SetField(int,char const * const *)" (?SetField@OGRFeature@@QEAAXHPEBQEBD@Z),函数 "public: void __cdecl OGRFeature::SetField(char const *,char const * const *)" (?SetField@OGRFeature@@QEAAXPEBDPEBQEBD@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: void __cdecl OGRFeature::SetField(int,union OGRField *)" (?SetField@OGRFeature@@QEAAXHPEATOGRField@@@Z),函数 "public: void __cdecl OGRFeature::SetField(char const *,union OGRField *)" (?SetField@OGRFeature@@QEAAXPEBDPEATOGRField@@@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: void __cdecl OGRFeature::SetField(int,int,int,int,int,int,float,int)" (?SetField@OGRFeature@@QEAAXHHHHHHMH@Z),函数 "public: void __cdecl OGRFeature::SetField(char const *,int,int,int,int,int,float,int)" (?SetField@OGRFeature@@QEAAXPEBDHHHHHMH@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: __cdecl GDALColorTable::GDALColorTable(enum GDALPaletteInterp)" (??0GDALColorTable@@QEAA@W4GDALPaletteInterp@@@Z),函数 "public: void __cdecl GDALColorTable::`default constructor closure'(void)" (??_FGDALColorTable@@QEAAXXZ) 中引用了该符号
demo\addons\geodot\win64\libgeodot.dll : fatal error LNK1120: 159 个无法解析的外部命令
scons: *** [demo\addons\geodot\win64\libgeodot.dll] Error 1120
scons: building terminated because of errors.

Add a new module to read simple vector data

For this issue we'll look at street data since it's relatively simple - more complex polygons will come later.

GDAL offers a lot of functionality for vector data. (https://gdal.org/api/ogrgeometry_cpp.html) We want to build a similar pipeline as with raster data for vectors:

GDAL <- Vector module (GDAL wrapper class) <- Geodot (Godot-compatible class)

Our street data seems to be a MultiLineString. We'll want to extract lines from it based on a position and a radius. In Godot, multiple types as a result make sense: PoolVector2/3Array, Curve(3D), Path.

CPP has no logging

Not sure this is useful but could we log (add debug switch) some internal state?

I did a simple test printing path.

Is there info useful for debugging provided data sources, fields, etc or are there better data validation tools?

(base) Clemenss-MacBook-Pro:geodot-plugin clemens$ git diff
diff --git a/src/geodot.cpp b/src/geodot.cpp
index acc61cc..6b26e57 100644
--- a/src/geodot.cpp
+++ b/src/geodot.cpp
@@ -24,6 +24,7 @@ Ref<GeoDataset> Geodot::get_dataset(String path) {
     Ref<GeoDataset> dataset;
     dataset.instance();
 
+    std::cout << "Using file: " << path.utf8().get_data() << std::endl;
     dataset->load_from_file(path);
 
     return dataset;

Crop lower-LOD tiles if none are available for the requested LOD

For example:
If a tile of LOD 21 is requested, but only tiles of up to LOD 20 are available, the corresponding quarter of the tile at LOD 20 should be cropped and returned.

If a tile of LOD 22 is requested in this example, the cropping should be done twice, recursively.

geodot crashes godot

2020-05-24_01-35-08-427 [ERR ] [main] Phytocoenosis CSV file does not exist, expected it at vegetation/phytocoenosis.csv
ERROR: Geodot::get_image: No valid data was available for the requested path and position!
   At: geodot.cpp:26.
ERROR: Geodot::get_image: No valid data was available for the requested path and position!
   At: geodot.cpp:26.
handle_crash: Program crashed with signal 11
Dumping the backtrace. Please include this when reporting the bug on https://github.com/godotengine/godot/issues
[1] /lib/x86_64-linux-gnu/libc.so.6(+0x46210) [0x7f36193af210] (??:0)
[2] GeoRaster::get_as_array() (??:0)
[3] GeoRaster::get_histogram() (??:0)
[4] GeoRaster::get_most_common(int) (??:0)
[5] godot::GeoImage::get_most_common(int) (??:0)
[6] godot_variant godot::__wrapped_method<godot::GeoImage, godot::Array, int>(void*, void*, void*, int, godot_variant**) (??:0)
[7] ../Godot_v3.2.1-stable_x11.64() [0x25cab97] (<artificial>:?)

Add support for point data

Similarly to the current LineString functionality, Points and MultiPoints should be supported and cast into a new GeoPoint for Godot.

Package for MacOS

Note: in several issues #51 #52 some comments we not related to those issues. These will be moved into this issue.

Thread unsafety edge case when loading/using GeoImages on Windows

We're still not quite sure what exactly is causing it, but there can be crashes on Windows in very specific circumstances. It is apparently related to loading new (non-cached) GeoImages from multiple threads. Here are some of our observations while testing in LandscapeLab:

  • Using a copy of the file in the other thread fixes the crash -> It's definitely related to loading from the same GeoTIFF
  • Using the same file all the time fixes the crash -> The cache is doing its job, only loading new files seems to be the problem
  • Removing any multi-threading fixes the crash -> It's definitely related to multi-threading

In 2419613, rigorous mutexes were added anytime a new resource is created or loaded. Interestingly, this did not fix the crashes, although they did seem to get less frequent.

With these mutexes and the cache, the creation of the GeoImage (loading GeoRaster, reading as array, etc) is actually non-threaded. That's why this behavior is really strange... I can't think of any situation where our two threads actually do something in parallel without a mutex, aside from GeoImage.get_image() and GeoImage.get_image_texture(). However, even those functions use a mutex internally.

This crash has never been observed on Linux, while it's pretty frequent on Windows (always happened within ~5 times of loading terrain up to a high LOD). So I'd say the issue is either related to GDAL on Windows, or to our compilation on Windows (which uses Visual C++, not g++).

There is no error message at all, the window simply closes.

We can currently work around this issue by using two copies of the same heightmap, one in the TerrainModule and one in the TerrainColliderModule. While this works, it's not very clean, so it would be good to figure out exactly what's going on.

(related to #10)

Implement all is_valid functions

Currently, these are only empty implementations. They should be implemented so that it can always be checked whether it is possible to call functions on an object (e.g. a database or an image), so that errors can be avoided. Examples of invalid states: Database with invalid path; image with no data (due to position outside of data range); layer with invalid name.

CRASH on MACOS: when opening GeoPackage causes crash in VectorExtractor (SQLite)

Steps to reproduce

  • compile project as described in the README.md
  • Find the path to Godot which is probably /Applications/Godot.app
  • Open terminal in this projects directory demo directory
  • Run from the terminal in demo directory the scene GeopackageDemo.tscn.
/Applications/Godot.app/Contents/MacOS/Godot GeopackageDemo.tscn
/Applications/Godot_mono.app/Contents/MacOS/Godot GeopackageDemo.tscn

Crash Godot on MaxOS Big Sur

This is from Godot_v3.2.4-rc1_osx.universal.app

...
Registered camera FaceTime HD Camera (Display) with id 5 position 0 at index 4
	- 'VirtualXPath'	[XML Path Language - XPath]
handle_crash: Program crashed with signal 11
ERROR: notification: NativeScriptInstance detected crash on method: get_dataset
   At: modules/gdnative/nativescript/nativescript.cpp:749.
Dumping the backtrace. Please include this when reporting the bug on https://github.com/godotengine/godot/issues
[1] 1   libsystem_platform.dylib            0x00007fff203abd7d _sigtramp + 29
[2] 2   ???                                 0x0000000114801080 0x0 + 4638904448

[3] 3   libsqlite3.0.dylib                  0x000000012b3996c7 sqlite3VdbeMemSetStr + 109
[4] 4   libsqlite3.0.dylib                  0x000000012b3e0e27 sqlite3Select + 992
[5] 5   libsqlite3.0.dylib                  0x000000012b3d7f25 yy_reduce + 3218
[6] 6   libsqlite3.0.dylib                  0x000000012b39fc5d sqlite3RunParser + 720
[7] 7   libsqlite3.0.dylib                  0x000000012b3d2c04 sqlite3Prepare + 380
[8] 8   libsqlite3.0.dylib                  0x000000012b39ef9f sqlite3LockAndPrepare + 176
[9] 9   libsqlite3.0.dylib                  0x000000012b39e2e2 sqlite3_exec + 176
[10] 10  libsqlite3.0.dylib                  0x000000012b39f33a sqlite3_get_table + 209

[11] SQLQuery(sqlite3*, char const*, SQLResult*)
[12] GDALGeoPackageDataset::Open(GDALOpenInfo*)
[13] OGRGeoPackageDriverOpen(GDALOpenInfo*)
[14] 14  libgdal.28.dylib                    0x0000000129278f92 GDALOpenEx + 1690
[15] NativeDataset::NativeDataset(char const*)
[16] NativeDataset::NativeDataset(char const*)
[17] VectorExtractor::open_dataset(char const*)
[18] godot::GeoDataset::load_from_file(godot::String)
[19] godot::Geodot::get_dataset(godot::String)
...

Add function to GeoImage to get normal map for heightmap

A typical use case of the GeoImage is to hold a heightmap. For such a heightmap, it is often requried to also get the corresponding normal map. We want to add this functionality.

Godot offers a method to turn a bump map into a normal map: Image::bumpmap_to_normalmap in https://github.com/godotengine/godot/blob/master/core/image.cpp. However, the normals created with this method are not very good looking. We might want to implement a custom method for this. If it works well, we could suggest merging this back into Godot and just calling that function here.

We've previously used this code for getting the normal in a shader and the results were good:

vec3 get_normal(vec2 normal_uv_pos) {
	// To calculate the normal vector, height values on the left/right/top/bottom of the current pixel are compared.
	// e is the offset factor.
	float texture_size = float(textureSize(heightmap, 0).x);
	float e = ((size / size_without_skirt) / texture_size);
	
	// Sobel filter for getting the normal at this position
	float bottom_left = get_height_no_falloff(normal_uv_pos + vec2(-e, -e));
	float bottom_center = get_height_no_falloff(normal_uv_pos + vec2(0, -e));
	float bottom_right = get_height_no_falloff(normal_uv_pos + vec2(e, -e));
	
	float center_left = get_height_no_falloff(normal_uv_pos + vec2(-e, 0));
	float center_center = get_height_no_falloff(normal_uv_pos + vec2(0, 0));
	float center_right = get_height_no_falloff(normal_uv_pos + vec2(e, 0));
	
	float top_left = get_height_no_falloff(normal_uv_pos + vec2(-e, e));
	float top_center = get_height_no_falloff(normal_uv_pos + vec2(0, e));
	float top_right = get_height_no_falloff(normal_uv_pos + vec2(e, e));
	
	vec3 long_normal;
	
	long_normal.x = -(bottom_right - bottom_left + 2.0 * (center_right - center_left) + top_right - top_left) / (size_without_skirt / texture_size);
	long_normal.y = (top_left - bottom_left + 2.0 * (top_center - bottom_center) + top_right - bottom_right) / (size_without_skirt / texture_size);
	long_normal.z = 1.0;

	return normalize(long_normal);
}

Maybe we can do something similar here.

Can I render non-square geotiff?

I could successfully run the demo. I also had some success with a custom geotiff file.
However the area I want to render is not a square (1242x648) and if I modify the demo code to try to display the full image I get an error like this:

$ godot .
Godot Engine v3.3.stable.arch_linux - https://godotengine.org
OpenGL ES 3.0 Renderer: AMD RENOIR (DRM 3.40.0, 5.11.16-zen1-1-zen, LLVM 11.1.0)
OpenGL ES Batching: ON
 
ERROR 5: out1.tif, band 1: Access window out of range in RasterIO().  Requested
(0,-594) of size 647x647 on raster of 1242x648.
ERROR 5: out1.tif, band 2: Access window out of range in RasterIO().  Requested
(0,-594) of size 647x647 on raster of 1242x648.
ERROR 5: out1.tif, band 3: Access window out of range in RasterIO().  Requested
(0,-594) of size 647x647 on raster of 1242x648.
ERROR 5: out1.tif, band 4: Access window out of range in RasterIO().  Requested
(0,-594) of size 647x647 on raster of 1242x648.
ERROR: create_from_image: Invalid image
   At: scene/resources/texture.cpp:199.
^C

Is there any support for non-square image?

info about the geotiff:

gdalinfo out1.tif 
Driver: GTiff/GeoTIFF
Files: out1.tif
Size is 1242, 648
Coordinate System is:
PROJCRS["WGS 84 / Pseudo-Mercator",
    BASEGEOGCRS["WGS 84",
        ENSEMBLE["World Geodetic System 1984 ensemble",
            MEMBER["World Geodetic System 1984 (Transit)"],
            MEMBER["World Geodetic System 1984 (G730)"],
            MEMBER["World Geodetic System 1984 (G873)"],
            MEMBER["World Geodetic System 1984 (G1150)"],
            MEMBER["World Geodetic System 1984 (G1674)"],
            MEMBER["World Geodetic System 1984 (G1762)"],
            ELLIPSOID["WGS 84",6378137,298.257223563,
                LENGTHUNIT["metre",1]],
            ENSEMBLEACCURACY[2.0]],
        PRIMEM["Greenwich",0,
            ANGLEUNIT["degree",0.0174532925199433]],
        ID["EPSG",4326]],
    CONVERSION["Popular Visualisation Pseudo-Mercator",
        METHOD["Popular Visualisation Pseudo Mercator",
            ID["EPSG",1024]],
        PARAMETER["Latitude of natural origin",0,
            ANGLEUNIT["degree",0.0174532925199433],
            ID["EPSG",8801]],
        PARAMETER["Longitude of natural origin",0,
            ANGLEUNIT["degree",0.0174532925199433],
            ID["EPSG",8802]],
        PARAMETER["False easting",0,
            LENGTHUNIT["metre",1],
            ID["EPSG",8806]],
        PARAMETER["False northing",0,
            LENGTHUNIT["metre",1],
            ID["EPSG",8807]]],
    CS[Cartesian,2],
        AXIS["easting (X)",east,
            ORDER[1],
            LENGTHUNIT["metre",1]],
        AXIS["northing (Y)",north,
            ORDER[2],
            LENGTHUNIT["metre",1]],
    USAGE[
        SCOPE["Web mapping and visualisation."],
        AREA["World between 85.06°S and 85.06°N."],
        BBOX[-85.06,-180,85.06,180]],
    ID["EPSG",3857]]
Data axis to CRS axis mapping: 1,2
Origin = (15208294.336400000378489,4159389.058000000193715)
Pixel Size = (1.000020450885421,-0.999814506173191)
Metadata:
  AREA_OR_POINT=Area
Image Structure Metadata:
  COMPRESSION=PACKBITS
  INTERLEAVE=PIXEL
Corner Coordinates:
Upper Left  (15208294.336, 4159389.058) (136d37' 6.36"E, 34d58' 0.98"N)
Lower Left  (15208294.336, 4158741.178) (136d37' 6.36"E, 34d57'43.81"N)
Upper Right (15209536.362, 4159389.058) (136d37'46.52"E, 34d58' 0.98"N)
Lower Right (15209536.362, 4158741.178) (136d37'46.52"E, 34d57'43.81"N)
Center      (15208915.349, 4159065.118) (136d37'26.44"E, 34d57'52.39"N)
Band 1 Block=1242x1 Type=Byte, ColorInterp=Red
  Mask Flags: PER_DATASET ALPHA 
Band 2 Block=1242x1 Type=Byte, ColorInterp=Green
  Mask Flags: PER_DATASET ALPHA 
Band 3 Block=1242x1 Type=Byte, ColorInterp=Blue
  Mask Flags: PER_DATASET ALPHA 
Band 4 Block=1242x1 Type=Byte, ColorInterp=Alpha

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.